I am looking for a way to update multiple MongoDB documents in one instruction. I am aware there is a updateMany() query, but it requires a strict filter parameter in order to update multiple documents.
I have an array of objects I'd like to update like so:
const objectsToUpdate = [
{ _id : 1, field : "a" },
{ _id : 2, field : "b" },
{ _id : 3, field : "c" }
]
The array is based on a file I retrieve from an FTP server. I check this file against the database and populate it if there are differences. I could iterate through the array and perform the findOneAndUpdate() query but I have to handle up to 5000 documents in a task.
I am looking for the update counterpart of insertMany() where the documents are looked up by _id and updated in one single query. Is this doable with Mongoose?
You can use bulkWrite that would be faster than multiple updateOne as there is only one round trip to 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)
})