let's say I run this query in Mongoose:
Room.find({}, (err,docs) => {
}).sort({date:-1});
This doesn't work!
Sorting in Mongoose has evolved over the releases such that some of these answers are no longer valid. As of the 4.1.x release of Mongoose, a descending sort on the date
field can be done in any of the following ways:
Room.find({}).sort('-date').exec((err, docs) => { ... });
Room.find({}).sort({date: -1}).exec((err, docs) => { ... });
Room.find({}).sort({date: 'desc'}).exec((err, docs) => { ... });
Room.find({}).sort({date: 'descending'}).exec((err, docs) => { ... });
Room.find({}).sort([['date', -1]]).exec((err, docs) => { ... });
Room.find({}, null, {sort: '-date'}, (err, docs) => { ... });
Room.find({}, null, {sort: {date: -1}}, (err, docs) => { ... });
For an ascending sort, omit the -
prefix on the string version or use values of 1
, asc
, or ascending
.
Been dealing with this issue today using Mongoose 3.5(.2) and none of the answers quite helped me solve this issue. The following code snippet does the trick
Post.find().sort('-posted').find(function (err, posts) {
// user posts array
});
You can send any standard parameters you need to find()
(e.g. where clauses and return fields) but no callback. Without a callback it returns a Query object which you chain sort()
on. You need to call find()
again (with or without more parameters -- shouldn't need any for efficiency reasons) which will allow you to get the result set in your callback.
See if this helps > How to sort in mongoose?
Also read this > http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
All the anwsers here are factually correct, however I am writing my anwser to make it clear that sometimes writing '-date' or date: -1 won't work if you either don't have a field named 'date' in your model, or if you passed the option: timestamps: true in options when creating your model. If you are using timestamps: true then you need to type: sort({createdAt: -1}) and this will work then.