我是mongodb的新手,并努力了解文档更新的工作原理。 我有一个名为' menu':
的文档{
"someId":"id123",
"someProperty":"property123",
"list" : [{
"innerProperty":"property423"
}]
}
映射到我的实体:
@Document(collection = "menu")
public class Menu {
@Id
private String id;
private String someid;
private String someProperty;
private List<SomeClass> list;
// accessors
}
当我尝试查找和更新此文档时,它不会更新文档。肯定会找到菜单,就像它返回带有Id的原始实体一样:
@Override
public Menu update(Menu menu) {
Query query = new Query(
Criteria.where("someId").is(menu.getSomeId()));
Update update = Update.update("menu", menu);
return mongoOperations.findAndModify(query, update,
FindAndModifyOptions.options().returnNew(true), Menu.class);
}
但如果我将其更改为此,则可以:
@Override
public Menu update(Menu menu) {
Query query = new Query(
Criteria.where("someId").is(menu.getSomeId()));
Update update = new Update().set("someProperty", menu.getSomeProperty())
.set("list", menu.getList());
return mongoOperations.findAndModify(query, update,
FindAndModifyOptions.options().returnNew(true), Menu.class);
}
我不太喜欢第二种方法,其中文档的每个元素都是单独设置的,因为您可能会想到我有一个相当大的文档并且容易出错。
为什么第一种方法不起作用?什么是更新文档的更好方法?