【问题标题】: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" }] }

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

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2017-04-28
    • 2016-10-06
    • 1970-01-01
    • 2018-04-23
    相关资源
    最近更新 更多