J'utilise MongoDB avec Node.JS. J'ai une collection qui contient une date et d'autres lignes. La date est un objet JavaScript Date
.
Comment puis-je trier cette collection par date?
Juste une légère modification de la réponse @JohnnyHK
collection.find().sort({datefield: -1}, function(err, cursor){...});
Dans de nombreux cas d'utilisation, nous souhaitons que les derniers enregistrements soient renvoyés (comme pour les dernières mises à jour/inserts).
Le tri par date ne nécessite rien de spécial. Il suffit de trier par le champ de date souhaité de la collection.
Mise à jour pour le pilote natif 1.4.28 node.js, vous pouvez trier par ordre croissant sur datefield
de l’une des façons suivantes:
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'
ou 'ascending'
peut également être utilisé à la place de 1
.
Pour trier par ordre décroissant, utilisez 'desc'
, 'descending'
ou -1
à la place du 1
.
db.getCollection('').find({}).sort({_id:-1})
Cela triera votre collection par ordre décroissant en fonction de la date d’insertion.
Les réponses de Sushant Gupta sont un peu dépassées et ne fonctionnent plus.
L'extrait suivant devrait être comme ceci maintenant:
collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});
Cela a fonctionné pour moi:
collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });
Utilisation de Node.js, Express.js et Monk
collection.find().sort('date':1).exec(function(err, doc) {});
cela a fonctionné pour moi
Avec la mangouste, c'est aussi simple que:
collection.find().sort('-date').exec(function(err, collectionItems) {
// here's your code
})
Carré supplémentaire [] Un support est requis pour que les paramètres de tri fonctionnent.
collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});
si votre format de date est comme ceci: 14/02/1989 ----> vous pouvez rencontrer des problèmes
vous devez utiliser ISOdate comme ceci:
var start_date = new Date(2012, 07, x, x, x);
-----> le résultat ------> ISODate ("2012-07-14T08: 14: 00.201Z")
maintenant, utilisez la requête comme ceci:
collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}
c'est ça :)
Avec mongoose, je ne pouvais pas utiliser 'toArray' et j'obtenais le message d'erreur suivant: TypeError: Collection.find(...).sort(...).toArray is not a function.
La fonction toArray existe dans la classe Cursor à partir du pilote Native MongoDB NodeJS ( référence ).
De plus, sort accepte seulement un paramètre, vous ne pouvez donc pas y insérer votre fonction.
Cela a fonctionné pour moi (comme l'a répondu Emil ):
collection.find().sort('-date').exec(function(error, result) {
// Your code
})