{"layers":[{"layer name":"layer1","layer_vals":[{"name":"val1","updated":"value"}]}]}
我有一个像上面那样的JSON文档。我希望每次在该子文档上执行操作时都更改更新的值。可以看到文档嵌套在两个数组中。我打算使用$ addToSet首先添加新的更新值,然后执行$ pull删除旧的。但是我收到一个错误,说我不能对同一个文件执行这两个操作。是否有任何解决方案? 关于解决上述问题的任何其他建议也会很棒
答案 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
难以查询的情况。