如何从对象Mongodb下的数组中删除对象

时间:2018-12-08 04:43:04

标签: node.js mongodb

我有一个这样的数据集:

{
    "_id" : ObjectId("5bacc98431481e0520856df8"),
    "action" : {
        "count" : 0,
        "shop" : [ 
            {
                "uid" : ObjectId("5c0b396a50b8a627c4172a2b"),

            }, 
            {
                "uid" : ObjectId("5c0b3b471ed11f2124e1e3a8"),

            },
            {
                "uid" : ObjectId("5c0b3b471ed11f2124e1e3a9"),

            }
         ]
      }
}

如何通过mongodb Query删除uidObjectId("5c0b3b471ed11f2124e1e3a8")的上述对象?

我使用的方法对我来说并不完美。我的方法是这样的:

db.CollectionName.find({_id: ObjectId("5bacc98431481e0520856df8")})
.then(data => {
  if (data.length > 0) {
        let xData = data[0].notifications.shop;
        let xuid = ObjectId("5c0b3b471ed11f2124e1e3a8");
        let filterData = xData.filter(
          x => x.uid!= xuid
        );
        User.update(
          { _id: ObjectId("5bacc98431481e0520856df8")},
          {
            $set: {
              action: { shop: filterData }
            }
          }
        )
        .then(usr => {
          console.log("deleted successfully")
         })
         .catch(er => {
           console.log(er)
         })
  }
})
.catch(error => {
    console.log(error)
}) 

通过这种方法,我将uid从本身在对象下的数组中删除。如果有人知道通过MongoDB查询完成的这类任务,请告诉我。

我们非常感谢您的帮助/建议。预先感谢尝试我的查询的开发人员。

1 个答案:

答案 0 :(得分:1)

执行此操作的mongo语句为:

db.getCollection('YOURCOLECTION').update(
{'_id': ObjectId("5bacc98431481e0520856df8")}, 
{ "$pull": 
       { "action.shop": { "uid": ObjectId("5c0b3b471ed11f2124e1e3a8") }} 
})

您将结合使用$pull命令和$update