mongodb 如何使用$pull删除嵌套数组

yxyvkwin  于 2022-12-12  发布在  Go
关注(0)|答案(1)|浏览(218)

我有一个这样结构的数据库

{
   "_id":"",
   "array1":[
      {
         "_id":"",
         "array2":[
            {
               
            }
         ]
      }
   ]
}

我尝试通过使用_id和array._id与$pull删除array 2,但是我没有任何成功。
我试过像这样的updateOne,但它不工作

{
   "_id":{
      "$in":[
         id1,
         id2
      ]
   }
},
{
   "$pull":{
      "array1.$.array2":{
         "array1._id":{
            "$in":[
               id3,
               id4
            ]
         }
      }
   }
}

我得到错误“位置操作符没有从查询中找到所需的匹配”。有人知道我该如何处理这个问题吗?

tp5buhyn

tp5buhyn1#

如果要删除数组中的所有元素并保留字段,只需将字段的值设置为空数组([])。
这里有一个方法。

db.collection.update({
  "_id": {
    "$in": [id1, id2]  // <-- document "_id"
  }
},
{
  "$set": {
    "array1.$[elem1].array2": []
  }
},
{
  "arrayFilters": [
    {
      "elem1._id": {
        "$in": [id3, id4]  // <-- "_id" of array1 element
      }
    }
  ]
})

mongoplayground.net上试试。
如果你想使用"$pull",你可以这样做,但我不期望它是有效的。

db.collection.update({
  "_id": {
    "$in": [id1, id2]
  }
},
{
  "$pull": {
    "array1.$[elem1].array2": {
      "$exists": true
    }
  }
},
{
  "arrayFilters": [
    {
      "elem1._id": {
        "$in": [id3, id4]
      }
    }
  ]
})

mongoplayground.net上试试。

相关问题