Cum să sortați o colecție după dată în MongoDB? (Programare, Node.Js, Mongodb)

flux a intrebat.

Folosesc MongoDB cu Node.JS. Am o colecție care conține o dată și alte rânduri. Data este un JavaScript Date obiect JavaScript.

Cum pot sorta această colecție în funcție de dată?

Comentarii

  • simplu , collection.find().sort({câmp de date: 1}, function(err, cursor){…}); sau puteți folosi și collection.find().sort({câmp de date: -1}, function(err, cursor){…}); -…  > Por Atul Jain.
  • Rețineți că este posibil să nu aveți nevoie de un date coloană: stackoverflow.com/questions/5125521/… – –  > Por phil294.
10 răspunsuri
Sushant Gupta

Doar o mică modificare la răspunsul lui @JohnnyHK

collection.find().sort({datefield: -1}, function(err, cursor){...});

În multe cazuri de utilizare, dorim să avem cele mai recente înregistrări care să fie returnate (cum ar fi pentru cele mai recente actualizări / inserții).

Comentarii

  • Ce intenționați să puneți în funcție? Încerc doar să sortez pe Date obiecte fără o funcție nu funcționează pentru mine pe 2.6.3. –  > Por Sam Brightman.
  • @SamBrightman Funcția respectivă este doar un callback. Orice doriți să faceți cu rezultatul interogării, puneți logica respectivă în interiorul callback-ului. Puteți citi mai multe despre ce sunt și cum funcționează callback-urile pentru a învăța programarea bazată pe evenimente. –  > Por Sushant Gupta.
  • Sigur, știu ce este un callback. Am văzut doar cerința de sortare în întrebare și toate răspunsurile dau callback-uri. În același timp, sortarea nu a funcționat pentru mine, așa că m-am gândit că poate trebuie să faceți o muncă suplimentară în funcție. –  > Por Sam Brightman.
  • @SamBrightman Oh ok. Pentru comoditate, puteți fi explicit și să faceți un lanț de genul collection.find().sort(...).exec(function(err, cursor) {}) –  > Por Sushant Gupta.
  • se spune că sort() ia doar 1 Argument –  > Por Jitendra Pancholi.
JohnnyHK

Sortarea după dată nu necesită nimic special. Doar sortați după câmpul de dată dorit al colecției.

Actualizat pentru driverul nativ node.js 1.4.28, puteți sorta crescător pe datefield utilizând oricare dintre următoarele moduri:

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' sau 'ascending' poate fi, de asemenea, utilizat în locul lui 1.

Pentru a sorta descrescător, utilizați 'desc', 'descending', sau -1 în loc de 1.

Comentarii

  • Aplic soluția de mai sus pe câmpul nume de utilizator, funcționează bine, dar este sensibil la majuscule și minuscule Cum să o ignor? –  > Por Rahul Matte.
  • Răspuns corect cu mai multe moduri (y) –  > Por abdulbarik.
Rich Rajah
db.getCollection('').find({}).sort({_id:-1}) 

Acest lucru va sorta colecția dvs. în ordine descrescătoare pe baza datei de inserție

krikara

Răspunsurile lui Sushant Gupta sunt un pic depășite și nu mai funcționează.

Următorul fragment ar trebui să fie așa acum :

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

Comentarii

  • @JohnnyHK Sweet. Nu-mi amintesc scenariul exact, dar vara trecută încercam să fac să funcționeze sortarea cu fragmentul lui Sushant și pur și simplu nu funcționa pentru mine. Poate din cauză că îi lipsea toArray parte. –  > Por krikara.
  • Acesta este, de fapt, un răspuns greșit, dă un rezultat greșit în node.js –  > Por David A.
GoldfishGrenade

Acest lucru a funcționat pentru mine:

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

Folosind Node.js, Express.js și Monk

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

acest lucru a funcționat pentru mine

a menționat https://docs.mongodb.org/getting-started/node/query/

emil.c

Cu mongoose este la fel de simplu ca:

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

DB Prasad

Piața suplimentară [ ] Bracket este necesar pentru ca parametrul de sortare să funcționeze.

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

Amine_Dev

dacă formatul de dată este de genul : 14/02/1989 —-> s-ar putea să întâmpinați unele probleme

trebuie să utilizați ISOdate astfel :

var start_date = new Date(2012, 07, x, x, x); 

—–> rezultatul ——>ISODate(„2012-07-14T08:14:00.201Z”)

acum utilizați interogarea în felul următor :

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

asta e tot 🙂

Pransh Tiwari

Cu mongoose nu am reușit să folosesc „toArray” și am primit eroarea: TypeError: Collection.find(...).sort(...).toArray is not a function.Funcția toArray există în clasa Cursor din driverul nativ MongoDB NodeJS (referință).

De asemenea, sort acceptă doar un singur parametru, deci nu puteți trece funcția dvs. în interiorul ei.

Acest lucru a funcționat pentru mine (așa cum a răspuns Emil):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})