如何在mongodb中删除嵌套数组中的所有数组元素

14ifxucb  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(225)

我的数据库结构如下,它只有一个documentproductsnested arrayproductsrefproduct document's id组成。

{
_id:"6371e078393a5194cc674369"
data: Array
  [0]:{
    image:
    title:
    products: Array
      [0]:product1Id
      [1]:product2Id
      [2]:product3Id
  },
  [1]:{
    image:
    title:
    products: Array
      [0]:product2Id
      [1]:product3Id
      [2]:product4Id
  },
}

我的要求是,当我从product document中删除product3时,我也要删除它的引用。所以这里我想从嵌套的array中删除product3Id
更新后的文档如下所示:

{
_id:"6371e078393a5194cc674369"
data: Array
  [0]:{
    image:
    title:
    products: Array
      [0]:product1Id
      [1]:product2Id
  },
  [1]:{
    image:
    title:
    products: Array
      [0]:product2Id
      [1]:product4Id
  },
}

我的尝试次数:

result = await homeSpecialModel.updateMany(
  {
    _id: "6371e078393a5194cc674369",
  },
  // { $pull: { data: { products: { $eleMatch: new ObjectId(id) } } } } -- 1st try
  // { $pull: { "data.products": new ObjectId(id) } } -- 2nd try
);

两个都不管用!

rlcwz9us

rlcwz9us1#

这里有一种方法可以使用"arrayFilters"来实现。

db.collection.update({
  _id: "6371e078393a5194cc674369"
},
{
  "$pull": {
    "data.$[elem].products": ObjectId("6371e078393a5194cc67436b")
  }
},
{
  "multi": true,
  "arrayFilters": [
    {
      "elem.products": ObjectId("6371e078393a5194cc67436b")
    }
  ]
})

mongoplayground.net上试试。

相关问题