在mongoDB中的嵌套数组中删除特定对象

时间:2019-06-11 06:20:03

标签: arrays mongodb

我有一个名为myCollection的mongoDB集合,在myCollection内部有不同的文档,其结构如下:

{
    "id": 1234,
    "posts": [
       [
          {
             "id": "0.0",
             "name": "john",
             "message": "hello"
          },
          {
             "id": "0.1",
             "name": "jane",
             "message": "good morning"
          },
          {
             "id": "0.2",
             "name": "josh",
             "message": "good evening"
          }
       ],
       [
          {
             "id": "1.0",
             "name": "mark",
             "message": "good lunch"
          }
       ],
       [
          {
             "id": "2.0",
             "name": "john",
             "message": "bye bye"
          },
          {
             "id": "2.1",
             "name": "mark",
             "message": "hi"
          }
       ]
    ]
}

谁能告诉我如何删除嵌套的“帖子”数组中的特定对象? 例如,围绕id = 1234的文档的此特定对象启动查询:

      {
         "id": "0.1",
         "name": "jane",
         "message": "good morning"
      }

我希望id = 1234的对象的结构变成这样:

{
    "id": 1234,
    "posts": [
       [
          {
             "id": "0.0",
             "name": "john",
             "message": "hello"
          },
          {
             "id": "0.2",
             "name": "josh",
             "message": "good evening"
          }
       ],
       [
          {
             "id": "1.0",
             "name": "mark",
             "message": "good lunch"
          }
       ],
       [
          {
             "id": "2.0",
             "name": "john",
             "message": "bye bye"
          },
          {
             "id": "2.1",
             "name": "mark",
             "message": "hi"
          }
       ]
    ]
}

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询

db.getCollection("test1").update(
  {
    "id": 1234,
    "posts": {
      "$elemMatch": {
        "$elemMatch": {
          "id": "0.1",
          "name": "jane",
          "message": "good morning"
        }
      }
    }
  },
  {
    "$pull": {
      "posts.$": {
        "id": "0.1",
        "name": "jane",
        "message": "good morning"
      }
    }
  }
)

答案 1 :(得分:0)

您需要拉出文档并执行更新。

  db.myCollection.update(
  { id : 1234 },
  {
    $pull : {"posts.0" :   {
         "id": "0.1",
         "name": "jane",
         "message": "good morning"
      }
   } 
 })