从子文档中删除特定键

时间:2017-12-27 09:59:15

标签: php mongodb

我的mongodb集合结构有点像这样

{
    "_id": "ObjectId('')",
    "user_id": 52,
    "messages": [
      {
        "_id": "ObjectId('')",
        "message": "Hello world 1",
        "flag": 1
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 2"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 3"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 4",
        "flag": 1
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 5",
        "flag": 1
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 6"
      }
    ]
}

我想从每个Message of objects数组

中删除键flag

我使用$找到了解决方案,但它只删除了第一个元素中的flag

有什么办法可以只用一个查询删除所有flag吗?

我预期的最终结果是

{
    "_id": "ObjectId('')",
    "user_id": 52,
    "messages": [
      {
        "_id": "ObjectId('')",
        "message": "Hello world 1"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 2"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 3"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 4"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 5"
      },
      {
        "_id": "ObjectId('')",
        "message": "Hello world 6"
      }
    ]
}

1 个答案:

答案 0 :(得分:1)

可以使用新的位置运算符$[](自v 3.6起)

db.collection.update( {}, {$unset: {"messages.$[].flag":""}} )
相关问题