userimage

mongodb: how to get the last N records?

I can"t find anywhere it has been documented this. By default, the find() operation will get the records from beginning. How can I get the last N records in mongodb?

Edit: also I want the returned result ordered from less recent to most recent, not the reverse.

userimage

If I understand your question, you need to sort in ascending order.

Assuming you have some id or date field called "x" you would do ...



.sort()


db.foo.find().sort({x:1});

The 1 will sort ascending (oldest to newest) and -1 will sort descending (newest to oldest.)

If you use the auto created _id field it has a date embedded in it ... so you can use that to order by ...


db.foo.find().sort({_id:1});

That will return back all your documents sorted from oldest to newest.


Natural Order


You can also use a Natural Order mentioned above ..

db.foo.find().sort({$natural:1}); 

Again, using 1 or -1 depending on the order you want.


Use .limit()


Lastly, it's good practice to add a limit when doing this sort of wide open query so you could do either ...

db.foo.find().sort({_id:1}).limit(50);

or

db.foo.find().sort({$natural:1}).limit(50);


Answer is