disons que je lance cette requête dans Mongoose:
Room.find({}, function(err,docs){
}).sort({date:-1});
Cela ne marche pas!
Le tri dans Mongoose a évolué au fil des versions, de sorte que certaines de ces réponses ne sont plus valables. Depuis la version 4.1.x de Mongoose, un tri décroissant sur le date
champ peut être effectué de l'une des manières 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, omettre le -
préfixe sur les valeurs de version de chaîne ou de l' utilisation 1
, asc
ou ascending
.
Query#find([criteria], [callback])
. J'ai pensé qu'il y avait peut-être une poignée de main secrète qui dit que "critères" peut être jusqu'à trois arguments, mais il répertorie le type comme "objet".find
méthode dans la documentation. VoirModel.find
.Module#property
notation et j'ai cherché#find
. Il semble qu'il n'y ait pas de moyen facile de naviguer ou de rechercher les documents. La recherche de find donne 187 résultats._id
champ. Par exemple, pour obtenir l'enregistrement le plus récent, vous pouvez faire:await db.collection.findOne().sort({ _id: -1 });
La bonne réponse est:
la source
J'ai traité ce problème aujourd'hui en utilisant Mongoose 3.5 (.2) et aucune des réponses ne m'a vraiment aidé à résoudre ce problème. L'extrait de code suivant fait l'affaire
Vous pouvez envoyer tous les paramètres standard dont vous avez besoin
find()
(par exemple, les clauses where et les champs de retour) mais pas de rappel. Sans rappel, il renvoie un objet Query sur lequel vous enchaînezsort()
. Vous devez appeler àfind()
nouveau (avec ou sans plus de paramètres - ne devrait pas en avoir besoin pour des raisons d'efficacité), ce qui vous permettra d'obtenir le jeu de résultats dans votre rappel.la source
Je fais ça:
Cela montrera les choses les plus récentes en premier.
la source
$orderby
est obsolète dans MongoDB 3.2, il ne devrait donc plus être utilisé.Devrait fonctionner aussi bien
ÉDITER:
Vous pouvez également essayer d'utiliser ceci si vous obtenez l'erreur
sort() only takes 1 Argument
:la source
Error: sort() only takes 1 Argument
Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
Solution courte:
la source
Voyez si cela aide> Comment trier la mangouste?
Lisez également ceci> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
la source
Vous pouvez également trier par
_id
champ. Par exemple, pour obtenir l'enregistrement le plus récent, vous pouvez faire,C'est beaucoup plus rapide aussi, car je suis plus que disposé à parier que votre
date
champ n'est pas indexé.la source
Celui-ci fonctionne pour moi.
la source