Mil*_*lad 25 java spring mongodb spring-data
我对使用Spring Data的MongoDB有疑问.我有这些域类:
@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>();
}
Run Code Online (Sandbox Code Playgroud)
通过这些域名,我可以成功地进行CRUD.只有一个问题.保存具有交易的用户时,将交易和位置在将它们保存到MongoDB时将其设置为空.为什么MongoDB不能为嵌入对象生成唯一的id?
用一笔交易保存用户后的结果:
{ "_id" : ObjectId( "4fed0591d17011868cf9c982" ),
"_class" : "User",
"email" : "milo@gmail.com",
"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 ) } ] }
Run Code Online (Sandbox Code Playgroud)
从结果中可以看出,Deal和Location ID设置为NULL.
dcr*_*sta 37
MongoDB的CRUD操作(insert,update,find,remove),都在顶层文件操作完全-虽然你当然可以通过嵌入文档字段进行过滤.嵌入的文档始终在父文档中返回.
该_id字段是父文档的必填字段,通常不是必需的或存在于嵌入文档中.如果您需要唯一标识符,您当然可以创建它们,_id如果方便您的代码或心理模型,您可以使用该字段存储它们; 更典型的是,它们以它们代表的名称命名(例如"username","otherSystemKey"等)._id除了顶级文档之外,MongoDB本身和任何驱动程序都不会自动填充字段.
特别是在Java中,如果要为_id嵌入式文档中的字段生成ObjectId值,可以使用以下命令:
someEmbeddedDoc._id = new ObjectId();
Run Code Online (Sandbox Code Playgroud)
Mongo不会_id在嵌入式文档上创建或需要。您可以根据需要添加一个_id字段-我已经完成了。
@Document
public class Location {
@Id
private ObjectId _id;
public Location() {
this._id = ObjectId.get();
}
}
@Document
public class User {
@Id
private ObjectId _id;
public User() {
this._id = ObjectId.get();
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很棒。
在REST架构的上下文中,嵌套文档具有自己的ID是很有意义的.
讨论了我对嵌套文档中id的需求的观点@dcrosta已经给出了关于如何在mongo中填充_id字段的正确答案.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
31197 次 |
| 最近记录: |