Sto usando MongoDB con Node.JS. Ho una raccolta che contiene una data e altre righe. La data è un Date
oggetto JavaScript .
Come posso ordinare questa raccolta per data?
date
colonna: stackoverflow.com/questions/5125521/...
Sto usando MongoDB con Node.JS. Ho una raccolta che contiene una data e altre righe. La data è un Date
oggetto JavaScript .
Come posso ordinare questa raccolta per data?
date
colonna: stackoverflow.com/questions/5125521/...
Risposte:
Solo una leggera modifica alla risposta @JohnnyHK
collection.find().sort({datefield: -1}, function(err, cursor){...});
In molti casi d'uso desideriamo che vengano restituiti i record più recenti (come per gli ultimi aggiornamenti / inserimenti).
Date
oggetti senza una funzione non funziona per me su 2.6.3.
collection.find().sort(...).exec(function(err, cursor) {})
L'ordinamento per data non richiede nulla di speciale. Basta ordinare in base al campo della data desiderato della raccolta.
Aggiornato per il driver nativo 1.4.28 node.js, puoi ordinare in ordine crescente datefield
utilizzando uno dei seguenti modi:
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'
o 'ascending'
può essere utilizzato anche al posto di 1
.
Per ordinamento discendente, uso 'desc'
, 'descending'
o -1
al posto del 1
.
db.getCollection('').find({}).sort({_id:-1})
Questo ordinerà la tua collezione in ordine decrescente in base alla data di inserimento
Le risposte di Sushant Gupta sono un po 'obsolete e non funzionano più.
Il seguente frammento dovrebbe essere così ora:
collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});
toArray
parte.
Questo ha funzionato per me:
collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });
Utilizzando Node.js, Express.js e Monk
collection.find().sort('date':1).exec(function(err, doc) {});
questo ha funzionato per me
riferito https://docs.mongodb.org/getting-started/node/query/
se il formato della tua data è così: 14/02/1989 ----> potresti riscontrare dei problemi
devi usare ISOdate in questo modo:
var start_date = new Date(2012, 07, x, x, x);
-----> il risultato ------> ISODate ("2012-07-14T08: 14: 00.201Z")
ora usa la query in questo modo:
collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}
questo è tutto :)
Con mongoose non ero in grado di utilizzare 'toArray' e ricevevo l'errore: TypeError: Collection.find(...).sort(...).toArray is not a function.
la funzione toArray esiste sulla classe Cursor dal driver Native MongoDB NodeJS ( riferimento ).
Anche l'ordinamento accetta solo un parametro, quindi non puoi passare la tua funzione al suo interno.
Questo ha funzionato per me (come risposto da Emil ):
collection.find().sort('-date').exec(function(error, result) {
// Your code
})