使用 $addToset 后跟 $pull 更新嵌套数组中的子文档

updating a subdocument inside nested array using $addToset followed by $pull

{"layers":[{"layer name":"layer1","layer_vals":[{"name":"val1","updated":"value"}]}]}

我有一个 JSON 文档,就像那个 above.I 希望在每次对其执行操作时更改更新的值 subdocument.As 可以看出该文档嵌套在两个arrays.I 我计划使用 $addToSet 首先添加新的更新值,然后执行 $pull 删除旧值 one.But 我收到一条错误消息,说我不能对同一个 [=17= 】 这个有什么办法吗? 解决上述问题的任何其他建议也很好

I am getting an error saying I cannot perform both operation on same document.Is there any solution to this?

没有。从 MongoDB 3.0 开始,您只能在单个更新中对数组字段使用一个运算符,如 $push$addToSet$pop。像这样的事情有很多相关的 JIRA 问题,但也许 SERVER-1050 是最接近的。

看一下您的架构,看起来每层一个文档可能会更好地为您服务

{ "name" : "layer1", "parent" : "some reference", "vals" : [{ "name" : "val1", "updated" : "value" }] }

可能引用 parent layer 字段所在的文档。您将 运行 遇到难以查询 layer_vals 的情况,因为它是一个嵌套数组。