我有一個關於MongoDB和Spring Data的問題。 我有這些領域類:MongoDB嵌入式對象沒有ID(空值)
@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>();
}
隨着這些領域我可以成功CRUD。只有一個問題。使用交易保存用戶時,交易和地點在將其保存到MongoDB時將_id設置爲空。 爲什麼MongoDB不能爲嵌入對象生成唯一的ID?
節省了用戶與一個交易之後的結果:
{ "_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標識一個根文件,而不是子文件。沒有理由爲什麼你想爲嵌套文檔自動生成一個id,因爲MongoDB無論如何都只能檢索頂層文檔。你真的需要嵌套的ID爲什麼? –
我需要搜索只有交易,而不是用戶。現在我必須從用戶搜索,然後循環以編程方式向用戶投擲每筆交易。 – Millad
該ID與您可以搜索的內容無關。搜索'{'deals.price':{$ gt:1000}}'是非常好的。儘管如此,這個查詢會返回一個'User'對象,您必須手動從中取出'Deal'。這是一個MongoDB限制,Spring Data沒有暗示。 –