web-dev-qa-db-fra.com

Comment trier une collection par date dans MongoDB?

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?

106
flow

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).

153
Sushant Gupta

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.

34
JohnnyHK
db.getCollection('').find({}).sort({_id:-1}) 

Cela triera votre collection par ordre décroissant en fonction de la date d’insertion.

19
Rich Rajah

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) {});

16
krikara

Cela a fonctionné pour moi:

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

Utilisation de Node.js, Express.js et Monk

12
GoldfishGrenade
collection.find().sort('date':1).exec(function(err, doc) {});

cela a fonctionné pour moi

référé https://docs.mongodb.org/getting-started/node/query/

6
Mendon Ashwini

Avec la mangouste, c'est aussi simple que:

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})
5
emil.c

Carré supplémentaire [] Un support est requis pour que les paramètres de tri fonctionnent.

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});
4
DB Prasad

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 :)

2
Amine_Dev

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
})
0
Pransh Tiwari