Réponses:
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
.
find
méthode dans la documentation. Voir Model.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:
Blah.find({}).sort({date: -1}).execFind(function(err,docs){
});
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
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 pas de rappel. Sans rappel, il renvoie un objet Query sur lequel vous enchaînez sort()
. 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.
Post.find().sort({date:-1}, function(err, posts){
});
Devrait fonctionner aussi bien
ÉDITER:
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
});
Error: sort() only takes 1 Argument
Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
Solution courte:
const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }
Room.find(query, projection, options).exec(function(err, docs) { ... });
Voyez si cela aide> Comment trier la mangouste?
Lisez également ceci> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
Vous pouvez également trier par _id
champ. Par exemple, pour obtenir l'enregistrement le plus récent, vous pouvez faire,
const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });
C'est beaucoup plus rapide aussi, car je suis plus que disposé à parier que votre date
champ n'est pas indexé.
Celui-ci fonctionne pour moi.
`Post.find().sort({postedon: -1}).find(function (err, sortedposts){
if (err)
return res.status(500).send({ message: "No Posts." });
res.status(200).send({sortedposts : sortedposts});
});`
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".