从嵌套数组MongoDB中删除对象

时间:2019-08-22 06:04:51

标签: database mongodb

我正在尝试从此用户id: "2019-08-22T04:53:11.357Z"数组中删除带有portfolio的对象。

我已经搜索了正确的查询过滤器来帮助我删除对象,但似乎没有任何作用!

这是我们正在使用的数据。目前只有一个用户  (InStock)中,但将来会添加更多。

[
  {
    "id": "MTg4MDU3ODM2MDk2NDU0NjU3",
    "name": "InStock",
    "balance": 7760,
    "portfolio": [
      {
        "id": "2019-08-22T04:15:22.998Z",
        "name": "Jordan Shoe",
        "size": "10.5",
        "price": 150
      },
      {
        "id": "2019-08-22T04:36:37.836Z",
        "name": "Nike Tee",
        "size": "M",
        "price": 35
      },
      {
        "id": "2019-08-22T04:53:11.357Z",
        "name": "Adidas Shoe",
        "size": "8.5",
        "price": 100
      }
    ],
    "history": [

    ]
  }
]

这就是我尝试使用在其他解决方案中看到的东西。

db.collection(collectionName).updateOne({"id": "MTg4MDU3ODM2MDk2NDU0NjU3"}, {$pull : {"portfolio": {"id": "2019-08-22T04:36:37.836Z"}}})

我正在寻找从InStock的投资组合数组中删除Adidas Shoe对象的行。

2 个答案:

答案 0 :(得分:0)

对您来说很好。

db.collection(collectionName).updateOne({"id": "MTg4MDU3ODM2MDk2NDU0NjU3"},
{ $pull: { portfolio: { $elemMatch: { id:"2019-08-22T04:36:37.836Z"} }},

答案 1 :(得分:0)

尝试此查询:

db.test1.updateOne({"_id" : ObjectId("5d5e7a291b761bfc0420e580")}, 
{$pull: {"portfolio": {"name": "Adidas Shoe"}}} )

执行后:

{
"_id" : ObjectId("5d5e7a291b761bfc0420e580"),
"portfolio" : [ 
    {
        "id" : "2019-08-22T04:15:22.998Z",
        "name" : "Jordan Shoe",
        "size" : "10.5",
        "price" : 150.0
    }, 
    {
        "id" : "2019-08-22T04:36:37.836Z",
        "name" : "Nike Tee",
        "size" : "M",
        "price" : 35.0
    }
],
"name" : "InStock",
"balance" : 7760.0

}