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

时间:2015-03-30 18:08:40

标签: node.js mongodb mongoose

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

我有一个像上面那样的JSON文档。我希望每次在该子文档上执行操作时都更改更新的值。可以看到文档嵌套在两个数组中。我打算使用$ addToSet首先添加新的更新值,然后执行$ pull删除旧的。但是我收到一个错误,说我不能对同一个文件执行这两个操作。是否有任何解决方案? 关于解决上述问题的任何其他建议也会很棒

1 个答案:

答案 0 :(得分:0)

  

我收到一条错误消息,说我无法在同一个文件上执行这两项操作。有什么解决办法吗?

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

看一下您的架构,看起来每层文档都可以提供更好的服务

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

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