使用$ pull和$ [identifier](mongoDB 3.6)从嵌套数组中删除对象

时间:2018-02-09 12:26:01

标签: mongodb

MongoDB 3.6允许对任何数组中的所有匹配元素执行复杂的数组操作 - 无论嵌套有多深 - Update Nested Arrays with $[identifier]

请考虑以下survey集合中的文档:

{
    "_id": "5a7d86d8fac139e71b0b9f5b",
    "results": [
      {
        "items": [
          {
            "comments": [
              {
                "id" : "123456",
                "email": "user@email.com",
                "comment": "comment 1"
              }
            ]
          }
        ]
      }
    ]
  }

我尝试使用id和新$pull

根据评论$[<identifier>]删除评论

我根据The update command 尝试了下面的command

db.runCommand({
  update: "survey",
  updates: [
    {
      q: {},
      u: {
        $pull: {
          "results.$[].items.$[].comments.$[comment]": { "comment.id": { $eq: "123456" } }
        }
      },
      arrayFilters: [{ "comment.id": { $eq: "123456" } }]
    }
  ]
})

但它没有用,因为$pull期望一个数组值: Cannot apply $pull to a non-array value

有任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:1)

尝试positional all $[]变体。

这样的东西
db.runCommand({
  update: "survey",
  updates: [
    {
      q: {},
      u: {
        $pull: {
          "results.$[].items.$[].comments": { "id":  "123456" }
        }
      }
    }
  ]
})