Amandeep Singh
Amandeep Singh

Reputation: 3840

Concurrent Read/Write in MongoDB

I have a collection from which I am getting max id and while inserting using max id + 1. The id column is unique in this collection.

When multiple instances of this service is invoked the concurrent application reads the same collection and gets the max id. But since the same collection is accessed the same max id is returned to multiple instances, can I get an explicit lock on the collection while reading the data from this collection and release the lock after writing in Mongo DB?

Upvotes: 1

Views: 3241

Answers (2)

ToreDenStore
ToreDenStore

Reputation: 46

Using mongoDB method collections.findAndModify() you can create your own "get-and-increment" query.

For example:

db.collection_name.findAndModify({
  query: { document_identifier: "doc_id_1" },
  update: { $inc: { max_id: 1 } },
  new: true  //return the document AFTER it's updated
})

https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/

Take a look at this page for more help:

https://www.tutorialspoint.com/mongodb/mongodb_autoincrement_sequence.htm

Upvotes: 2

Clement Amarnath
Clement Amarnath

Reputation: 5466

Try this approach

Instead of getting the max id in read of the collection and increment it as max id + 1.

While read for multiple instances just give the document/collection, and while updating follow the below logic

Let us have the below part in a synchronized block, so that no two threads gets the same max id
synchronize() {
  getMaxId from collection
  increase it by 1
  insert the new document
}

Please refer:

https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

https://www.tutorialspoint.com/mongodb/mongodb_autoincrement_sequence.htm

Hope it Helps!

Upvotes: 0

Related Questions