Wie man die letzten N Datensätze in mongodb?
Ich kann nicht finden, überall, es wurde dokumentiert diese. Standardmäßig wird die find () - operation erhalten die Aufzeichnungen von Anfang an. Wie bekomme ich die letzten N Datensätze in mongodb?
Edit: ich möchte auch das Ergebnis bestellt weniger aktuell auf dem neuesten, nicht Umgekehrt.
- plase spezifisch zu beantworten, welcher Teil der web-Seite löst meine Frage?
- Hi @BinChen, ich habe das gleiche problem vor kurzem, ist es gelöst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Ihre Frage zu verstehen, müssen Sie, um eine Sortierung in aufsteigender Reihenfolge.
Vorausgesetzt, Sie haben einige id oder Datum Feld namens "x", die Sie tun würde ...
.sort()
Den 1 wird aufsteigend Sortieren (älteste bis neueste) und -1 wird absteigend Sortieren (neueste zuerst) aufgeführt.)
Wenn Sie das auto erstellt _id Feld hat Sie ein date eingebettet in..., so können Sie zur Bestellung von ...
Dass zurück alle Ihre Dokumente in der Reihenfolge vom ältesten zum neuesten.
Natürliche Ordnung
Können Sie auch einen Natürliche Ordnung oben genannten ...
Wieder mit 1 oder -1 je nach der Reihenfolge, die Sie wollen.
Verwenden .limit()
Schließlich, es ist gute Praxis, fügen Sie eine Grenze, wenn Sie diese Art von weit offen-Abfrage, so dass Sie könnte entweder ...
oder
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Ohne Auftrag, was wäre das Ergebnis??? Ich Stimme mit Ihnen überein, dass diese umgekehrte Reihenfolge ist nicht intuitiv. Das ist kein SQL, nachdem alle sollte Sie normal OO Paradigmen.db.foo.find().sort({$natural:-1}).limit(50);
bekommen Sie die letzten 50 Einträge in absteigender Weise. Wie können wir optimal die Reihenfolge ändern, aufsteigend?.to_a.sort_by { |doc| doc.id }
danach? Oder verwenden Sie moped-Funktionen direkt und es neu anordnen.Den letzten N zusätzlichen Aufzeichnungen, die von weniger aktuell zu den letzten, kann man mit dieser Abfrage:
Wenn Sie wollen, dass Sie in der umgekehrten Reihenfolge:
Wenn Sie installieren Mongo-Hacker können Sie auch verwenden:
Wenn Sie müde werden, schreiben Sie diese Befehle alle die Zeit, die Sie erstellen können benutzerdefinierte Funktionen in Ihre ~/.mongorc.js. E. g.
dann von einer mongo-shell geben Sie einfach
last(N)
db.collection.find().reverse().limit(1)
gibt mir die Fehlermeldung... has no method reverse
Um letzten N Datensätze, die Sie ausführen können, unten-Abfrage:
wenn Sie möchten, dass nur der Letzte Datensatz:
Hinweis: In Ort der $Natur, die Sie können verwenden Sie eine der Spalten aus Ihrer Sammlung.
können Sie
sort()
,limit()
,skip()
zu bekommen, letzten N Rekord-start von jedem übersprungen WertSchauen Sie unter Abfragen: Sortieren und Natürliche Ordnung, http://www.mongodb.org/display/DOCS/Sorting+und+Natur+Bestellen
ebenso wie sort (), die unter Cursor-Methoden
http://www.mongodb.org/display/DOCS/Advanced+Abfragen
Kann man nicht "überspringen", basierend auf der Größe der Sammlung, denn es wird nicht die query-Bedingungen berücksichtigt werden.
Die richtige Lösung ist, um zu Sortieren von der gewünschten end-Punkt, der Begrenzung der Größe der Ergebnismenge, dann passen Sie die Reihenfolge der Ergebnisse, wenn nötig.
Hier ist ein Beispiel, basierend auf real-world-code.
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.Können Sie versuchen, diese Methode:
Holen Sie sich die Gesamtanzahl der Datensätze in der Sammlung mit
Dann verwenden, überspringen:
Sortieren, überspringen und so weiter können sehr langsam sein, abhängig von der Größe Ihrer Sammlung.
Einer besseren Leistung wäre dann erreicht, wenn Sie haben, Sie Sammlung indiziert durch einige Kriterien erfüllen; und dann können Sie min() cursor:
Ersten, index-Sammlung mit
db.collectionName.setIndex( yourIndex )
Sie können auf-oder absteigend, das ist cool, denn Sie wollen immer das "N letzten Elemente"... also, wenn Sie index in absteigender Reihenfolge ist die gleiche wie immer die "ersten N Elemente".
Dann finden Sie den ersten Artikel Ihrer Sammlung und Nutzung Ihrer index-Feld Werte als min-Kriterien in eine Suche wie:
Hier ist die Referenz für min() cursor: https://docs.mongodb.com/manual/reference/method/cursor.min/
Möchten Sie vielleicht, um mit der
find
Optionen :http://docs.meteor.com/api/collections.html#Mongo-Collection-find
@bin-chen,
Können Sie eine aggregation für die Letzte n Einträge von a Teilmenge der Dokumente in der Sammlung. Hier ist ein Vereinfachtes Beispiel ohne Gruppierung (was Sie tun würde, die zwischen den Stufen 4 und 5 in diesem Fall).
Dieser gibt die letzten 20 Einträge (basierend auf einem Feld namens "timestamp"), aufsteigend sortiert. Es projiziert dann die einzelnen Dokumente _id, timestamp und whatever_field_you_want_to_show in das Ergebnis ein.
so, das Ergebnis würde folgendermaßen Aussehen:
Hoffe, das hilft.
laut mongoDB-Dokumentation:
verwenden $slice Betreiber zu begrenzen array-Elemente
wo geolocation ist array von Daten, aus, dass wir die 5 letzten Datensatz.
Letzte Funktion sollte
sort
, nichtlimit
.Beispiel:
sort
werden nachlimit
?