2013-03-26 2 views
52

Doc:MongoDB, retirer l'objet du tableau

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

est-il un moyen de tirer un objet spécifique d'un tableau? C'EST À DIRE. Comment puis-je tirer l'objet entier avec l'identifiant 23 du tableau items.

J'ai essayé:

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

Cependant, je suis certain que je ne suis pas en utilisant « pull » correctement. D'après ce que je comprends tirer tirera un champ d'un tableau, mais pas un objet.

Des idées sur la façon de retirer tout l'objet de la matrice. En guise de bonus, j'essaye de le faire dans mongoose/nodejs, et je ne sais pas si ce type de chose est dans l'API mongoose mais je ne l'ai pas trouvé.

+1

Avez-vous essayé? http://stackoverflow.com/questions/9048424/removing-specific-items-from-array-with-mongodb –

+0

yup c'est tout. Merci! – lostintranslation

Répondre

83

essayer ..

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

Oui, ma syntaxe était erronée. Merci! Également essayé sans les options contrariées et multi et cela a fonctionné aussi bien. – lostintranslation

+0

MERCI @sambomartin –

+5

Quelles sont ces valeurs booléennes? –

7

J'ai un document comme

enter image description here

Je dois supprimer l'adresse du réseau d'adresses

Après beaucoup de recherche sur Internet, j'ai trouvé la 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); 

     }); 
+0

Comment est-ce que cela a fonctionné? cela peut-il être fait en PHP @Deepak – RussellHarrower

4
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 
      } 
     ] 
    } 
0

utilisez $ tirez pour retirer les données

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