Tengo colecciones de MongoDB con varios documentos. Ahora tengo los ID de documentos de entrada en una serie de autos que quiero actualizar. Algo como esto.
req.body = { cars: [ '584cf6c126df866138a29408', '5852819e9693c27c136104bd' ], name: 'Home' }, { cars: [ '584d638242795854a091cbbf', '5842e09e372b786355ba50e7' ], name: 'Office' } ]Operación esperada
db.cars.update({_id : req.body[i].cars}, {name : req.body[i].name}, {new : true}); Resultado Esperado
Los cuatro documentos con ID se actualizan con su campo de nombre en el documento.
Ahora, una forma de actualizar los autos es tener un async.each aplicado en la matriz y un aysnc.each en estos dos documentos. Esa es la forma más larga de hacerlo. Esperaba que si tuviera un async.each para estas dos matrices y de alguna manera pudiera comprimir ambos documentos en una sola consulta, haría que el código se viera más elegante. Ya he revisado varias páginas y todavía no he encontrado nada. Quería saber si esto es posible en mongo o no.
Al principio, es posible que deba convertir el tipo de String de identificación de su automóvil a mongodb ObjectId , lo que significa:
cars: [ ObjectId'584cf6c126df866138a29408'), ObjectId'5852819e9693c27c136104bd') ] luego use el operador $in para hacer coincidir con los documentos.
puede probar esto.
var ObjectId = require('mongodb').ObjectID; var cars = req.body[i].cars.map(function (id) { return new ObjectId(id); }) db.cars.update({_id : {$in: cars}}, {$set : {name : req.body[i].name}}, {multi : true}, function(err, docs) { console.log(docs); });Intente usar $in de mongodb en la consulta de búsqueda mientras realiza la actualización. Ver consulta a continuación:
Model.update({_id : {$in: req.body[i].cars}}, {$set : {name : req.body[i].name}}, {multi : true});Entonces, de esta manera, debe ejecutar 2 consultas para actualizar los nombres.
Ver $in-doc para saber más sobre los usos.
Espero que esto te ayudará.