2012-11-19 5 views
2

Je veux juste supprimer plusieurs objets dans de mon tableau dans MongoDB en utilisant pullAllobjets MongoDB pullAll avec plusieurs arguments

db.collection.update({'_id': ObjectId(".....")}, { $pullAll : { 'notifications' : [{'type' : type}, {'id': id}]} }) 

Pourquoi ce ne fonctionne pas? Quelle est la syntaxe correcte?

Mise à jour:

le document est:

{ 
    "_id" : ObjectId("......"), 
    "notifications" : [ { "type" : "aaa", 
          "id" : "123" }, 
         { "type" : "bbb", 
          "id" : "123" }, 
         { "type" : "ccc", 
          "id" : "234" }] 
} 
+0

Quelle est la structure de votre document? – Mihai

+0

J'ai mis à jour la question – kschaeffler

+0

Jetez un oeil à ce lien http://stackoverflow.com/questions/10310837/mongodb-c-update-pullall-not-removing-items – Mihai

Répondre

0

Pour utiliser $ pullAll vous devez faire correspondre l'objet entier exactement. Pourquoi ne pas simplement utiliser tirer $, je suis sûr que ce serait répondre à vos besoins

+0

Je viens d'essayer avec 'db.collection.update ({ '_id': ObjectId (".....")}, {$ pull: {'notifications': [{'type': type}, {'id': id}]}}, Faux, Vrai) ' et 'db.collection.update ({'_ id': ObjectId (" ..... ")}, {$ pull: {'notifications': {'type': type, 'id': id}}}, False, True) 'et j'ai le même résultat – kschaeffler

+0

Essayez et $ pull en utilisant seulement" type "ou seulement" id ", juste pour voir si ça marche – Mihai

2

Votre problème peut être l'un des deux endroits:

Première votre mise à jour a un problème de syntaxe:

db.collection.update({'_id': ObjectId(".....")}, 
    { $pullAll : 
     { 'notifications' : [{'type' : type}, {'id': id}] 
     } 
    } 
) 

devrait être:

db.collection.update({'_id': ObjectId(".....")}, 
    { $pullAll : 
     { 'notifications' : [{'type' : type, 'id': id}] 
     } 
    } 
) 

Remarque J'ai enlevé }, { et rejoint le type et id en un seul sous-document JSON.

L'autre problème est que vos éléments de tableau semblent avoir des valeurs id qui sont des chaînes de forme "123" - êtes-vous sûr de transmettre une chaîne à votre instruction de mise à jour? La chaîne "123" n'est pas égale à l'entier 123.