How to sort a collection by date in MongoDB?

node.jsMongodb

node.js Problem Overview


I am using MongoDB with Node.JS. I have a collection which contains a date and other rows. The date is a JavaScript Date object.

How can I sort this collection by date?

node.js Solutions


Solution 1 - node.js

Just a slight modification to @JohnnyHK answer

collection.find().sort({datefield: -1}, function(err, cursor){...});

In many use cases we wish to have latest records to be returned (like for latest updates / inserts).

Solution 2 - node.js

db.getCollection('').find({}).sort({_id:-1}) 

This will sort your collection in descending order based on the date of insertion

Solution 3 - node.js

Sorting by date doesn't require anything special. Just sort by the desired date field of the collection.

Updated for the 1.4.28 node.js native driver, you can sort ascending on datefield using any of the following ways:

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc' or 'ascending' can also be used in place of the 1.

To sort descending, use 'desc', 'descending', or -1 in place of the 1.

Solution 4 - node.js

Sushant Gupta's answers are a tad bit outdated and don't work anymore.

The following snippet should be like this now :

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});

Solution 5 - node.js

This worked for me:

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

Using Node.js, Express.js, and Monk

Solution 6 - node.js

collection.find().sort('date':1).exec(function(err, doc) {});

this worked for me

referred https://docs.mongodb.org/getting-started/node/query/

Solution 7 - node.js

With mongoose it's as simple as:

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})

Solution 8 - node.js

Additional Square [ ] Bracket is required for sorting parameter to work.

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});

Solution 9 - node.js

if your date format is like this : 14/02/1989 ----> you may find some problems

you need to use ISOdate like this :

var start_date = new Date(2012, 07, x, x, x); 

-----> the result ------>ISODate("2012-07-14T08:14:00.201Z")

now just use the query like this :

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

that's it :)

Solution 10 - node.js

With mongoose I was not able to use 'toArray', and was getting the error: TypeError: Collection.find(...).sort(...).toArray is not a function. The toArray function exists on the Cursor class from the Native MongoDB NodeJS driver (reference).

Also sort accepts only one parameter, so you can't pass your function inside it.

This worked for me (as answered by Emil):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionflowView Question on Stackoverflow
Solution 1 - node.jsSushant GuptaView Answer on Stackoverflow
Solution 2 - node.jsRich RajahView Answer on Stackoverflow
Solution 3 - node.jsJohnnyHKView Answer on Stackoverflow
Solution 4 - node.jskrikaraView Answer on Stackoverflow
Solution 5 - node.jsGoldfishGrenadeView Answer on Stackoverflow
Solution 6 - node.jsMendon AshwiniView Answer on Stackoverflow
Solution 7 - node.jsemil.cView Answer on Stackoverflow
Solution 8 - node.jsDB PrasadView Answer on Stackoverflow
Solution 9 - node.jsAouidane Med AmineView Answer on Stackoverflow
Solution 10 - node.jsPransh TiwariView Answer on Stackoverflow