2011-07-14 17 views
35

me encontré con el siguiente script:¿Cómo puedo actualizar varios documentos en mangosta

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

MongoDB tiene la bandera "multi" para una actualización a través de múltiples documentos, pero no fue capaz de conseguir este trabajo con la mangosta. ¿Esto todavía no es compatible o estoy haciendo algo mal?

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

Respuesta

56

Actualmente creo que update() en Mongoose tiene algunos problemas, consulte: https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erg y https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion.

Sin embargo, revise los documentos para la actualización: http://mongoosejs.com/docs/api.html (es en Modelo). La definición es:

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

lo necesario para pasar las opciones dentro de un objeto, por lo que su código sería:

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

creo que Mangosta envuelve su cid en un conjunto $, así que esto no es lo mismo que ejecutar esa misma actualización en el shell mongo. Si ejecutó eso en el shell, todos los documentos se reemplazarán por uno con un solo cid: ''.

+0

esto es exactamente lo que quería ... para actualizar 'CIDS a todos los dispositivos'. Gracias – pkyeck

8

usted tiene que utilizar el múltiple: la verdadera opción

Device.update({},{cid: ''},{multi: true}); 
Cuestiones relacionadas