Mongoose / MongoDB – update multiple documents with different _id and values in one instruction

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?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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)
})


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x