web-dev-qa-db-fra.com

Dans Mongoose, comment puis-je trier par date? (node.js)

disons que je lance cette requête en Mongoose:

Room.find({}, function(err,docs){

}).sort({date:-1}); 

Ça ne marche pas!

136
TIMEX

Tri en mongoose a évolué au fil des versions, de sorte que certaines de ces réponses ne sont plus valables. À partir de la version 4.1.x de Mongoose, un tri décroissant sur le champ date peut être effectué de l'une des façons suivantes:

Room.find({}).sort('-date').exec(function(err, docs) { ... });
Room.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Room.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Room.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Room.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });

Pour un tri croissant, omettez le préfixe - de la version de chaîne ou utilisez les valeurs 1, asc ou ascending.

378
JohnnyHK

La bonne réponse est:

Blah.find({}).sort({date: -1}).execFind(function(err,docs){

});
52
TIMEX

Nous avons traité ce problème aujourd'hui avec Mongoose 3.5 (.2) et aucune des réponses ne m'a aidé à résoudre ce problème. L'extrait de code suivant fait l'affaire

Post.find().sort('-posted').find(function (err, posts) {
    // user posts array
});

Vous pouvez envoyer tous les paramètres standard dont vous avez besoin à find() (par exemple, les clauses where et les champs de retour) mais no callback. Sans rappel, il retourne un objet de requête sur lequel vous chaînez sort(). Vous devez appeler à nouveau find() (avec ou sans plus de paramètres - vous n'en aurez pas besoin pour des raisons d'efficacité), ce qui vous permettra d'obtenir le résultat défini dans votre rappel.

12
Jimmy Hillis
Post.find().sort({date:-1}, function(err, posts){
});

Devrait fonctionner aussi bien

EDIT:

Vous pouvez également essayer d’utiliser ceci si vous obtenez l’erreur sort() only takes 1 Argument:

Post.find({}, {
    '_id': 0,    // select keys to return here
}, {sort: '-date'}, function(err, posts) {
    // use it here
});
4
lynx_vbg

Je fais ça:

Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
    ...
})

Cela montrera les choses les plus récentes en premier.

4
Noah
1
neebz

Solution courte:

const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }

Room.find(query, projection, options).exec(function(err, docs) { ... });
1
davidsonsns