MongoDB,从数组中删除对象

nom7f22z  于 2023-03-29  发布在  Go
关注(0)|答案(8)|浏览(164)

文件:

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name',
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}

有没有一种方法可以从数组中拉取一个特定的对象?例如,我如何从items数组中拉取id为23的整个item对象。
我试过:

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});

但是我很确定我没有正确地使用pull。据我所知,pull将从数组中拉取字段,而不是对象。
有没有办法把整个对象从数组中拉出来。
作为奖励,我试图在mongoose/nodejs中完成这一点,也不确定这种类型的东西是否在mongoose API中,但我找不到它。

wkftcu5l

wkftcu5l1#

试试..

db.mycollection.update(
    { '_id': ObjectId("5150a1199fac0e6910000002") }, 
    { $pull: { items: { id: 23 } } },
    false, // Upsert
    true, // Multi
);
emeijp43

emeijp432#

我有一份文件

我必须从地址数组中删除地址
在互联网上搜索了很多之后,我找到了解决方案

Customer.findOneAndUpdate(query, { $pull: {address: addressId} }, (err, data) => {
    if (err) {
        return res.status(500).json({ error: 'error in deleting address' });
    }

    res.json(data);
});
jljoyd4f

jljoyd4f3#

我的数据库:

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }, 
    { "id" : 3 }
  ]
}

我的查询:

db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}

输出:

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }
  ]
}
s5a0g9ez

s5a0g9ez4#

你也可以试试:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
kmb7vmvb

kmb7vmvb5#

对于数组中的单个记录:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true}
);

对于数组中具有相同移动的号码的多个记录:

db.getCollection('documents').update(
    { },
    {
        $pull: {
            items: { mobile: 1234567890 }
        }
    },
    { new:true, multi:true }
)
uqxowvwt

uqxowvwt6#

使用$pull删除数据

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});
im9ewurl

im9ewurl7#

Kishore Diyyana:
如果要移除所有元素,包括元素属性列表的键。
下面是mongoDB unset操作符的例子:

db.UM_PREAUTH_CASE.update(
{ 'Id' : 123}, { $unset: { dataElements: ""} } )

JSON看起来像这样:

{ "Id":123,"dataElements" : [ { "createdBy" : "Kishore Babu Diyyana", "createdByUserId" : 2020 }, { "createdBy" : "Diyyana Kishore", "createdByUserId" : 2021 } ] }
ffx8fchx

ffx8fchx8#

Very simple way to do this:-

Sample data that I used is:-
{
            "_id": "6419606109433f61b50dfaa4",
            "category": "SUV",
            "vehicles": [
                {
                    "id": "18d527aa-948e-40bc-9ce1-c54dc04a6350"
                    "name": "Honda City 4th Generation",
                    "average": "23.26 kmpl",
                    "cc": "1197 cc",
                    "seat": "5 Seater",
                },
{
                    "id": "18d527aa-948e-40bc-9ce1-c54dc04a6349"
                    "name": "Honda City 4th Generation",
                    "average": "23.26 kmpl",
                    "cc": "1197 cc",
                    "seat": "5 Seater",
                },
}

exports.delete_vehicle = async (req, res, next) => {
  const { id, vuuid } = req.params;
  const vehicle = await VehicleCategory.find({ _id: id });
  try{
    for(let i = 0; i < vehicle[0].vehicles.length; i++){
      if(vehicle[0].vehicles[i].id === vuuid){
        await VehicleCategory.findByIdAndUpdate(
          {_id:id},
          { $pull: { vehicles: { id: vuuid } } },
          { new: true }
        );
        res.status(200).json({
          message: "Vehicle deleted successfully."
        });
      }else{
        res.status(404).json({
          message: "The given id is not found."
        });
      }
    }
  }catch (err) {
    res.status(500).json({
      error: err
    });
  }
  

};

router.put(“/deleteVehicle/:id/:vuuid”,userController.delete_vehicle);

相关问题