仅更新嵌套在文档数组嵌套数组中的特定子文档

时间:2019-04-05 14:46:31

标签: java mongodb spring-data-mongodb mongotemplate

我有一个带有嵌套数组的示例文档,如下所示。     {

"locations" : [ 
        {
                "appointments" : [ 
                {
                    "apptId" : "3456",
                    "status" : ""
                }, 
                {
                    "apptId" : "12345",
                    "status" : ""
                }
            ]
        }, 
        {
            "appointments" : [ 
                {
                    "apptId" : "12345",
                    "status" : ""
                }, 
                {
                    "apptId" : "3456",
                    "status" : ""
                }
            ]
        }
]

}

我只想更新嵌套数组中满足我条件的子文档。

我尝试使用以下查询,但无法更新特定文档,该文档可以位于嵌套数组中的任何索引处。它给了我不希望的结果。

Query query = new Query();      query.addCriteria(Criteria.where("locations.appointments.apptId").is(apptId));
Update update = new Update();
update.set("locations.$[].appointments.$.status", "cancelled");

WriteResult wrote = mongoTemplate.updateMulti(query, update, Schema.class, collectionName);

我的预期结果是将第一个位置的第二个约会和第二个位置的第一个约会的状态更新为“已取消”(即,匹配apptId = 12345的条件)。我尝试使用update.set("locations.$[].appointments.$.status", "cancelled");update.set("locations.$[].appointments.$[].status", "cancelled");,但这并没有给我想要的结果。

请帮助我解决这个问题。我的MongoDB版本是3.6.10。谢谢!

0 个答案:

没有答案