Springデータを持つMongoDBに関する質問があります。私がすることができます成功したCRUDこれらのドメインでMongoDB組み込みオブジェクトにID(NULL値)がありません
@Document
public class Deal {
@Id
private ObjectId _id;
private Location location;
private User user;
private String description;
private String title;
private String price;
private boolean approved;
private Date expirationDate;
private Date publishedDate;
}
@Document
public class Location {
@Id
private ObjectId _id;
private Double latitude;
private Double longitude;
private String country;
private String street;
private String zip;
}
@Document
public class User {
@Id
private ObjectId _id;
private String email;
private String password;
private String profile_image_url;
private Collection<Deal> deals = new ArrayList<Deal>();
}
: は、私はこれらのドメインクラスを持っています。問題は1つだけです。取引を持つユーザを保存するとき、dealとLocationは、MongoDBに保存する際に_idをnullに設定します。 MongoDBが埋め込みオブジェクトのユニークなIDを生成できないのはなぜですか?
1つの契約でユーザーを保存した後の結果:
{ "_id" : ObjectId("4fed0591d17011868cf9c982"),
"_class" : "User",
"email" : "[email protected]",
"password" : "mimi",
"deals" : [
{ "_id" : null,
"location" : { "_id" : null,
"latitude" : 2.22,
"longitude" : 3.23445,
"country" : "Denmark",
"street" : "Denmark road 77",
"zip" : "2933" },
"description" : "The new Nexus 7 Tablet. A 7 inch tablet from Google.",
"title" : "Nexus 7",
"price" : "1300",
"approved" : false,
"expirationDate" : Date(1343512800000),
"publishedDate" : Date(1340933521374) } ] }
あなたが結果からわかるように、対処し、場所IDがNULLに設定されています。
IDは、サブ文書ではなくルート文書を識別します。とにかくMongoDBがトップレベルのドキュメントだけを取り出すことができるので、ネストされたドキュメントのidを自動生成する必要はありません。あなたは実際にネストしたIDを何のために必要としますか? –
私は、ユーザーではなく取引のみを検索する必要があります。今私はユーザーから検索し、プログラム内でユーザーのすべての取引をループしています。 – Millad
IDはあなたが検索できるものとは関係ありません。 '{'deals.price':{$ gt:1000}}'を検索するのはまったく問題ありません。それでも、このクエリは、 'Deal'を手作業で取り出す必要がある' User'オブジェクトを返します。これはMongoDBの制限であり、Springのデータには何も示唆されていません。 –