使用 spring 引导更新 mongodb 中的嵌套数组对象字段

Update nested array object field in mongodb using spring boot

mongodb 的新手, 尝试更新文档的多个数组对象字段。 没有得到预期的结果

文档结构:

{
    "_id" : ObjectId("4faaba123412d654fe83hg876"),
    "user_id" : 123456,
 
    "items" : [{
            Name:{
                    "id":1,
                    "item_name" : "my_item_one",
                    "price" : 20
            },
            Details:{
                    "Date" : "10/02/2022",
                    "Address":"test"
            }}],
            [{
            Name:{
                    "id":2,
                    "item_name" : "my_item_two",
                    "price" : 20
            },
            Details:{
                    "Date" : "10/02/2022",
                    "Address":"test"
            }}]
}

根据id需要更新日期

Spring 启动代码

Query query = new Query(Criteria.where("user_id").is("123456").and("items")
.eleMatch(Criteria.where("items.Name.id").is(1)));
Update update = new Update().set("items.0.Details.Date", "29/01/2022");
mongoOperation.findAndModify(query, update, Items.class);

但是当我 运行 这个查询时它返回 null 任何人都可以帮忙吗 谢谢 , 也试过

Query query = new Query(Criteria.where("user_id").is("123456").and("items")
.eleMatch(Criteria.where("items.Name.id").is(1)));
Update update = new Update().set("items.Details.Date", "29/01/2022");
mongoOperation.findAndModify(query, update, Items.class);

我认为您的查询没有找到任何要更新的内容。尝试 运行 将查询作为 java 中的“查找”并查看返回了哪个文档。我的直觉是“和 eleMatch”部分是错误的。只需通过 user_id 查询整个文档,并在特定字段上执行更新。此外,您描述的更新语法将更新所有项目,您需要在数组中指定索引。也许在 java 中手动进行更新会更容易。