2011-07-14 15 views
35

znalazłem następujący skrypt:jak mogę zaktualizować wiele dokumentów w mangusta

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

MongoDB ma „multi” flagę na aktualizację na wielu dokumentach, ale nie byłem w stanie uzyskać to pracę z mangusty. Czy to nie jest jeszcze obsługiwane czy robię coś złego ?!

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

Odpowiedz

56

Obecnie uważam, że update() w Mongoose ma pewne problemy, patrz: https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erg i https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion.

Należy jednak sprawdzić dokumentację aktualizacji: http://mongoosejs.com/docs/api.html (pod Modelem). Definicja brzmi:

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

Trzeba zdać opcje wewnątrz obiektu, więc Twój kod byłoby:

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

wierzę, że Mongoose owija swój Cid w USD zestawu, więc to nie jest to samo, co uruchamianie tej samej aktualizacji w powłoce Mongo. Jeśli uruchomisz to w powłoce, wszystkie dokumenty zostaną zastąpione przez jeden z jednym cid: ''.

+0

to nie dokładnie to, co chciałem ... zaktualizować identyfikatory klientów do 'wszystkich urządzeń'. dzięki – pkyeck

8

Musisz użyć Multi: prawdziwy opcję

Device.update({},{cid: ''},{multi: true}); 
Powiązane problemy