2011-07-14 4 views
35

J'ai trouvé le script suivant:comment puis-je mettre à jour plusieurs documents dans mangouste

Device.find(function(err, devices) { 
    devices.forEach(function(device) { 
    device.cid = ''; 
    device.save(); 
    }); 
}); 

MongoDB a le drapeau « multi » pour une mise à jour sur plusieurs documents, mais je n'a pas pu obtenir ce travail avec mangouste. Est-ce que ce n'est pas encore soutenu ou est-ce que je fais quelque chose de mal ?!

Device.update({}, {cid: ''}, false, true, function (err) { 
    //... 
}); 

Répondre

56

Actuellement je crois que update() en Mongoose a quelques problèmes, voir: https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erg et https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion.

Toutefois, vérifiez les documents pour la mise à jour: http://mongoosejs.com/docs/api.html (son sous modèle). La définition est:

Model.update = function (query, doc, options, callback) { ... } 

Vous devez passer les options à l'intérieur d'un objet, de sorte que votre code serait:

Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... }); 

Je crois que enveloppements Mongoose votre cid dans un ensemble de $, donc ce n'est pas la même chose que d'exécuter cette même mise à jour dans le shell mongo. Si vous avez exécuté cela dans le shell, tous les documents seront remplacés par un seul cid: ''.

+0

ce fait exactement ce que je voulais ... mettre à jour des «à des CIDs tous les périphériques. THX – pkyeck

8

Vous devez utiliser les multiples: véritable option

Device.update({},{cid: ''},{multi: true}); 
Questions connexes