I am trying to get the last document in a MongoDB collection.
The following works in the Mongo shell:
db.collection.find().limit(1).sort({$natural:-1})
Results in the last object like so:
{ "_id" : ObjectId("62c8817075c9400469b1fc3a"), "token" : "135e53ebb05aa2b6055513843cb8e0dca1", "createdAt" : ISODate("2022-07-08T19:11:44.730Z"), "updatedAt" : ISODate("2022-07-08T19:11:44.730Z"), "__v" : 0 }
But this does not work in my Express app:
const last = FM_Model.find().limit(1).sort({$natural:-1})
console.log('Last Token from MONGODB here -> ', last)
In the code above the console.log returns a very long object related to the collection itself, but not the document I want.
I have tried other variations but nothing has worked so far. If anyone can give me any ideas of what I am missing that would be great.
3
Answers
Try
db.collection.find().sort({‘_id’:-1}).limit(1)
First revert the order then get the first one
.find()
returns an array. But there is an better version with.findOne
wich return the result orundefined
With
-1
you get the oldest element, wich is the latest.I would recommend sorting on the _id field as it’s indexed by default: reference. Or you could sort by the createdAt if the field has a descending order index.
More about MongoDB indexing can be found here