skip to Main Content

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


  1. Try

    db.collection.find().sort({‘_id’:-1}).limit(1)

    First revert the order then get the first one

    Login or Signup to reply.
  2. .find() returns an array. But there is an better version with .findOne wich return the result or undefined

    FM_Model.findOne({}, {}, { sort: { 'createdAt' : -1 } })
    

    With -1 you get the oldest element, wich is the latest.

    Login or Signup to reply.
  3. 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.

    const last = await FM_Model.findOne({}).sort({ _id: -1 });
    

    More about MongoDB indexing can be found here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search