web-dev-qa-db-ja.com

MongoDB、配列からオブジェクトを削除

Doc:

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

配列から特定のオブジェクトをプルする方法はありますか? I.E.アイテム配列からID 23のアイテムオブジェクト全体を取得するにはどうすればよいですか。

私が試してみました:

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

しかし、「プル」を正しく使用していないと確信しています。私が理解していることから、プルはオブジェクトからではなく配列からフィールドを引き出します。

オブジェクト全体を配列から引き出す方法についてのアイデア。

ボーナスとして、私はこれをmongoose/nodejsでしようとしていますが、このタイプのものがmongoose APIにあるかどうかはわかりませんが、見つけることができませんでした。

68

試してみてください。

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

私のような文書があります

enter image description here

アドレス配列からアドレスを削除する必要があります

インターネットでたくさん検索した後、私は解決策を見つけました

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

        res.json(data);

      });
7
Deepak Sisodiya
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
Viral Patel

つかいます $pullデータを削除する

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

あなたもそれを試すことができます:

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