Estoy buscando una forma de actualizar varios documentos de MongoDB en una sola instrucción. Soy consciente de que hay una consulta updateMany(), pero requiere un parámetro de filtro estricto para actualizar varios documentos.
Tengo una serie de objetos que me gustaría actualizar así:
const objectsToUpdate = [ { _id : 1, field : "a" }, { _id : 2, field : "b" }, { _id : 3, field : "c" } ]La matriz se basa en un archivo que recupero de un servidor FTP. Compruebo este archivo con la base de datos y lo completo si hay diferencias. Podría iterar a través de la matriz y realizar la consulta findOneAndUpdate() pero tengo que manejar hasta 5000 documentos en una tarea.
Estoy buscando la contraparte de actualización de insertMany() donde los documentos se buscan por _id y se actualizan en una sola consulta. ¿Es esto factible con Mongoose?
Puede usar bulkWrite que sería más rápido que múltiples updateOne ya que solo hay un viaje de ida y vuelta a MongoDB.
const bulkOps = objectsToUpdate.map(obj => { return { updateOne: { filter: { _id: obj._id }, // If you were using the MongoDB driver directly, you'd need to do // `update: { $set: { field: ... } }` but mongoose adds $set for you update: { field: obj[field] } } } }) MongooseModel.bulkWrite(bulkOps).then((res) => { console.log("Documents Updated", res.modifiedCount) })