Spring Mongodb findandModify 无法更新整个文档

Spring Mongodb findandModify fails to update entire document

我是 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
}

当我尝试像这样查找和更新此文档时,它没有更新文档。它确实找到了菜单,因为它 returns 带有 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);
}

我不太喜欢第二种方法,其中文档的每个元素都是单独设置的,因为您可能认为我有一个相当大的文档并且容易出错。

为什么第一种方法不行?什么是更新文档的更好方法?

查看 findAndModify 的文档 - 它 returns 文档的版本 字段被修改之前。如果您之后直接执行新的 find(),您会看到您的更改实际上已保存到 MongoDB。