MongoDB, remove object from array

2019-01-01 05:52发布

问题:

Doc:

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

Is there a way to pull a specific object from an array? I.E. how do I pull the entire item object with id 23 from the items array.

I have tried:

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

However I am pretty sure that I am not using \'pull\' correctly. From what I understand pull will pull a field from an array but not an object.

Any ideas how to pull the entire object out of the array.

As a bonus I am trying to do this in mongoose/nodejs, as well not sure if this type of thing is in the mongoose API but I could not find it.

回答1:

try..

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


回答2:

I have a document like

\"enter

I have to delete address from address array

After searching lots on internet I found the solution

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

        res.json(data);

      });


回答3:

my database:->
        {
       \"_id\" : ObjectId(\"5806056dce046557874d3ab18\"),
       \"data\" : [ 
           {
               \"id\" : 1
           }, 
           {
               \"id\" : 2
           }, 
           {
               \"id\" : 3
           }
       ]
    }

MY QUERY:->
db.getCollection(\'play_table\').update({},{$pull:{\"data\":{\"id\":3}}},{multi:true}
OutPut:->
{
  \"_id\" : ObjectId(\"5806056dce046557874d3ab18\"),
       \"data\" : [ 
           {
               \"id\" : 1
           }, 
           {
               \"id\" : 2
           }
       ]
    }


回答4:

Use $pull to remove the data

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


回答5:

You can try it also:

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