web-dev-qa-db-fra.com

comment mettre à jour plusieurs documents en mangouste

J'ai trouvé le script suivant:

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'ai pas pu faire fonctionner cela avec la mangouste. N'est-ce pas encore pris en charge ou est-ce que je fais quelque chose de mal?!

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

Actuellement, je crois que update() dans 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 .

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

Solution antérieure (dépréciée après la version mangouste 5+)

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

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

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

Nouvelle solution

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

Model.updateMany = function ({}, {cid: ''}, function(err) { ... });

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

76
kcbanner

Vous devez utiliser l'option multi: true

Device.update({},{cid: ''},{multi: true});
17
Rifaideen

Ces réponses sont obsolètes. C'est la vraie solution:

Device.updateMany({}, { cid: '' });
12