【问题标题】:updating a subdocument inside nested array using $addToset followed by $pull使用 $addToset 后跟 $pull 更新嵌套数组中的子文档
【发布时间】:2015-03-30 18:08:39
【问题描述】:
{"layers":[{"layer name":"layer1","layer_vals":[{"name":"val1","updated":"value"}]}]}
我有一个像上面那样的 JSON 文档。我希望在每次对该子文档执行操作时更改更新的值。可以看出该文档嵌套在两个数组中。我打算使用 $addToSet首先添加新的更新值,然后执行 $pull 删除旧的值。但是我收到一个错误,说我不能在同一个文档上执行这两个操作。有什么解决方案吗?
此外,解决上述问题的任何其他建议也很棒
【问题讨论】:
标签:
node.js
mongodb
mongoose
【解决方案1】:
我收到一条错误消息,提示我无法对同一个文档执行这两项操作。有什么解决方案吗?
没有。从 MongoDB 3.0 开始,您只能在一次更新中对数组字段使用一个运算符,例如 $push、$addToSet 或 $pop。像这样的事情有很多相关的 JIRA 问题,但也许SERVER-1050 是最接近的。
查看您的架构,似乎每层都有一个文档可能会更好地为您服务
{ "name" : "layer1", "parent" : "some reference", "vals" : [{ "name" : "val1", "updated" : "value" }] }
可能带有parent 对layer 字段所在的文档的引用。您将遇到难以在 layer_vals 上查询的情况,因为它是一个嵌套数组。