DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Translating OData Queries to MongoDB in Java With Jamolingo
  • How to Identify the Underlying Causes of Connection Timeout Errors for MongoDB With Java
  • Mitigating Cache Stampedes in Dynamic API Translation Using Java 21 Virtual Threads
  • HTTP QUERY in Java: The Missing Method for Complex REST API Searches

Trending

  • The Context Window Trap: Why More Context Doesn’t Mean Better AI
  • Compress RabbitMQ Messages
  • Production-Grade LLM Regression Testing: Contracts, Evals, and Quality Gates
  • Beyond @Transactional: Solving the Dual-Write Problem in Distributed Microservices

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Data Engineering
  3. Databases
  4. MongoDB Java API: Using a Sequence Collection With FindAndModify()

MongoDB Java API: Using a Sequence Collection With FindAndModify()

Documents in MongoDB have a unique object ID when they are created. How can we get around this to develop a more effective REST API when document lookups are involved?

By 
Kevin Hooke
·
Jul. 06, 16 · Tutorial
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
10.5K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

MongoDB doesn't have an equivalent of sequences typically used in relational databases — documents are automatically given a unique ObjectId value for the "_id" property when inserted.

To return data from documents via a REST API, it may be more useful to use a sequential unique key. The MongoDB docs have an example of how you could use a collection to hold a document per sequence that you need  and increment a value property each time you retrieve it with findAndModify().

There are a number of questions on StackOverflow related to this approach. Most seem related to the approach doc linked above (e.g. here, here, and articles elsewhere, like here).

To implement this approach using the Java API, using findAndModify() seems to be key, as you need to ensure you are querying and incrementing the sequence value in a document in a single, atomic step. After that point, once you have the updated/next value from your document holding your sequence, the fact that you use that value in a subsequent atomic insert to another document seems to be safe (please leave me a comment if this assumption is not correct!), as every call to findAndModify() to increment the sequence value is atomic (making an assumption here based on my limited MongoDB knowledge, but I think this is correct!).

Here’s how I implemented the approach using the Java API:

public int getNextSequence() throws Exception {
    DB db = MongoConnection.getMongoDB();

    DBCollection sequences = db.getCollection("sequences");

    // fields to return
    DBObject fields = BasicDBObjectBuilder.start()
        .append("_id", 1)
        .append("value", 1).get();

    DBObject result = sequences.findAndModify(
      new BasicDBObject("_id", "addressId"), //query 
      fields, // what fields to return
      null, // no sorting
      false, //we don't remove selected document
      new BasicDBObject("$inc", new BasicDBObject("value", 1)), //increment value
      true, //true = return modified document
      true); //true = upsert, insert if no matching document

      return (int)result.get("value");
}
API MongoDB Java (programming language)

Published at DZone with permission of Kevin Hooke. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Translating OData Queries to MongoDB in Java With Jamolingo
  • How to Identify the Underlying Causes of Connection Timeout Errors for MongoDB With Java
  • Mitigating Cache Stampedes in Dynamic API Translation Using Java 21 Virtual Threads
  • HTTP QUERY in Java: The Missing Method for Complex REST API Searches

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook