2012-12-19 9 views
54

Ich arbeite an meinem ersten Projekt mit Meteor und habe Schwierigkeiten beim Sortieren.Wie kann ich eine Meteor-Sammlung nach der Zeit des Einfügens sortieren?

Ich habe ein Formular, wo Benutzer Aphorismen eingeben, die dann in einer Liste angezeigt werden. Aktuell werden die neuesten Aphorismen automatisch am Ende der Liste angezeigt. Gibt es eine einfache Möglichkeit, die neueste Version am Anfang der Liste erscheinen zu lassen?

Ich habe versucht:

Template.list.aphorisms = function() { 
    return Aphorisms.find({}, {sort: {$natural:1}}); 
}; 

Und bin ratlos, weil die Meteor docs nicht viele Beispiele haben.

+0

Sie könnten immer ein 'date_created' Attribut hinzufügen und danach sortieren. – knownasilya

+0

Wie sieht Ihre Sammlung aus? – muruga

+0

Ich habe ein date_created Attribut hinzugefügt ... ich hatte gehofft mit MongoDB, dass ich das nicht tun müsste, obwohl ... – squeezemylime

Antwort

99

Unter der Annahme, dass die date_created zusammen mit dem Zeitstempel in einem gültigen Datumsformat ist, sollten Sie die analysierte Wert von date_created einfügen mit Date.parse() Javascript-Funktion, die die Anzahl der Millisekunden zwischen Januar in date_created enthielt 1, 1970 und Datumswert gibt.

Als Ergebnis davon enthält der zuletzt hinzugefügte Datensatz einen höheren Wert von date_created als der zuvor eingefügte Datensatz.

Nun, wenn die Datensätze zu holen, sortieren Sie den Cursor, um der date_created Parameter absteigend als:

Aphorisms.find({}, {sort: {date_created: -1}}); 

Diese Aufzeichnungen von neueren auf ältere sortieren wird.

Hoffe, das hilft. eine sauberere Lösung sein

+0

Das funktioniert sehr gut..die einzige Möglichkeit, das Datum nur so zu speichern, dass es funktioniert ist: var combinedTime = year + "" + day + "" + Monat + "" + Stunde + "" + Minute + "" + Sekunde; – squeezemylime

+0

Ja, stellen Sie sicher, dass das Attribut "date_created" auch einen gültigen Zeitstempel enthält. Da dies nicht nur mit "Datum + Monat + Jahr" funktioniert. –

+1

Um Datumsangaben clientseitig in Minimongo zu sortieren, muss das Datum als Zeichenfolge gespeichert werden, z. B. ISO8601-Format. Minimongo kann nicht nach Datumstypen sortieren. Sehen Sie den Text in Rot unter http://docs.meteor.com/#collections –

8

Ich habe folgendes gefunden:

Template.list.aphorisms = function() { 
     return Aphorisms.find().fetch().reverse(); 
    }; 

Da gesamte Kollektion ist bereits in der umgekehrten Reihenfolge, dass Sie möchten, können Sie einfach ein Array aller Objekte erstellen und umgekehrt die Bestellung.

+3

Ich bin mir nicht sicher, ob Sie sich wirklich darauf verlassen können, dass Mongo Ihre Artikel in Ordnung hält. Theoretisch, ja, das funktioniert - aber das ist meines Wissens nicht immer eine sichere Annahme. – j6m8

+2

Dies ist die sicherste Lösung. MongoDB erstellt automatisch ein createdAt-Feld in Meteor. Bei großen Abfragen ist dies die sicherste und sauberste Lösung. – TheBetterJORT

+2

Hallo, 'createdAt' Feld wird nicht automatisch erstellt (vielleicht war es zum Zeitpunkt des Kommentars, ich benutze 1.4.2).Sie müssen selbst damit umgehen, normalerweise dank 'aldeed: collection2' Paket. Ich bin nicht sicher, warum dies nicht das Standardverhalten ist, wie bei Mungo oder anderen Sprachen. –

Verwandte Themen