Pawan
Pawan

Reputation: 32321

MongoDB : How to make findAndModify returns the Last Updated Record

I am new to Mongo DB and having trouble as it is behaving differently in different environments ( Dev , QA and Production)

I am using findAndModify to Update the Records in my MongoDB .

There is a Job that runs daily which Updates /Inserts Data to Mongo DB , and i am using findAndModify to Update the Record .

But what i observed is that the first record that is returned by findAndModify is different in Dev , QA and Production environemnts although the three environments are having the same Data ??

As per the Mongo DB document , it states that findAndModify will modify the first document

Currently this is my code :

BasicDBObject update = new BasicDBObject();
update.append("$set", new BasicDBObject(dataformed));
coll.findAndModify(query, update);

Please let me know how can i make sure that , the findAndModify returns the Last Updated Record , rather than depending upon un predictable behaviour ??

Edited Part

I am trying to use sort for my code but it is giving me compilation errors

coll.findAndModify(query, sort: { rating: 1 }, update);

I have a field called as lastUpdated which is created using System.currentTimeMilis

So can i use this lastUpdated as shown this way to get the Last Updated Record

coll.findAndModify(  query, 
    new BasicDBObject("sort", new BasicDBObject("lastUpdated ", -1)), 
    update);    

Upvotes: 0

Views: 5324

Answers (2)

JohnnyHK
JohnnyHK

Reputation: 311885

It appears you are using Java, so you have to construct the sort parameter as a DBObject, just like the other parameters:

coll.findAndModify(
    query, 
    new BasicDBObject("sort", new BasicDBObject("rating", 1)), 
    update);

Upvotes: 2

Philipp
Philipp

Reputation: 69663

As we already explained to you in your other question, you have to add a field to the document which contains the date it was changed and then sort by that field or you have to use a capped collection, because they guarantee that the insertion order is preserved.

Upvotes: 1

Related Questions