Ich kann nirgendwo finden, dass dies dokumentiert wurde. Standardmäßig werden bei der Operation find () die Datensätze von Anfang an abgerufen. Wie kann ich die letzten N Datensätze in Mongodb bekommen?
Bearbeiten: Ich möchte auch, dass das zurückgegebene Ergebnis von weniger aktuell bis zuletzt sortiert wird, nicht umgekehrt.
Antworten:
Wenn ich Ihre Frage verstehe, müssen Sie in aufsteigender Reihenfolge sortieren.
Angenommen, Sie haben ein ID- oder Datumsfeld mit dem Namen "x", würden Sie ...
.Sortieren()
Die 1 sortiert aufsteigend (älteste bis neueste) und -1 sortiert absteigend (neueste bis älteste).
Wenn Sie das automatisch erstellte Feld _id verwenden, ist ein Datum darin eingebettet. Sie können dieses also verwenden, um nach ... zu bestellen.
Dadurch werden alle Ihre Dokumente vom ältesten zum neuesten sortiert zurückgegeben.
Natürliche Reihenfolge
Sie können auch eine oben erwähnte natürliche Ordnung verwenden ...
Verwenden Sie wieder 1 oder -1, je nach gewünschter Reihenfolge.
Verwenden Sie .limit ()
Schließlich empfiehlt es sich, bei dieser Art von weit offener Abfrage ein Limit hinzuzufügen, damit Sie entweder ...
oder
quelle
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Ohne Bestellung, was wäre das Ergebnis? Ich stimme Ihnen zu, dass diese umgekehrte Reihenfolge nicht intuitiv ist. Dies ist kein SQL, schließlich sollte es normalen OO-Paradigmen folgen.Die letzten N hinzugefügten Datensätze, von weniger aktuell bis zuletzt, können mit dieser Abfrage angezeigt werden:
Wenn Sie sie in umgekehrter Reihenfolge wünschen:
Wenn Sie Mongo-Hacker installieren , können Sie auch Folgendes verwenden:
Wenn Sie es leid sind, diese Befehle ständig zu schreiben, können Sie benutzerdefinierte Funktionen in Ihren ~ / .mongorc.js erstellen. Z.B
dann von einer Mongo-Muschel einfach tippen
last(N)
quelle
db.collection.find().reverse().limit(1)
gibt mir den Fehler... has no method reverse
Um die letzten N Datensätze zu erhalten, können Sie die folgende Abfrage ausführen:
Wenn Sie nur einen letzten Datensatz möchten:
Hinweis: Anstelle von $ natural können Sie eine der Spalten aus Ihrer Sammlung verwenden.
quelle
Sie verwenden können
sort()
,limit()
,skip()
zuletzt N Aufzeichnungsstart von jedem übersprungenen Wert zu erhaltenquelle
Sie können diese Methode ausprobieren:
Holen Sie sich die Gesamtzahl der Datensätze in der Sammlung mit
Verwenden Sie dann überspringen:
quelle
Schauen Sie unter Abfragen: Sortieren und natürliche Reihenfolge, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order sowie sort () unter Cursormethoden http://www.mongodb.org/display nach / DOCS / Advanced + Abfragen
quelle
Sie können nicht basierend auf der Größe der Sammlung "überspringen", da die Abfragebedingungen nicht berücksichtigt werden.
Die richtige Lösung besteht darin, nach dem gewünschten Endpunkt zu sortieren, die Größe der Ergebnismenge zu begrenzen und gegebenenfalls die Reihenfolge der Ergebnisse anzupassen.
Hier ist ein Beispiel, das auf realem Code basiert.
quelle
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ bin-chen,
Sie können eine Aggregation für die letzten n Einträge einer Teilmenge von Dokumenten in einer Sammlung verwenden. Hier ist ein vereinfachtes Beispiel ohne Gruppierung (was Sie in diesem Fall zwischen den Stufen 4 und 5 tun würden).
Dies gibt die letzten 20 Einträge (basierend auf einem Feld namens "Zeitstempel") in aufsteigender Reihenfolge zurück. Anschließend werden die einzelnen Dokumente _id, timestamp und was auch immer_field_y_want_to_show in die Ergebnisse projiziert.
Das Ergebnis würde also ungefähr so aussehen:
Hoffe das hilft.
quelle
Das Sortieren, Überspringen usw. kann je nach Größe Ihrer Sammlung sehr langsam sein.
Eine bessere Leistung würde erzielt, wenn Sie Ihre Sammlung nach bestimmten Kriterien indizieren lassen. und dann könnten Sie min () Cursor verwenden:
Indizieren Sie zuerst Ihre Sammlung mit
db.collectionName.setIndex( yourIndex )
Sie können eine aufsteigende oder absteigende Reihenfolge verwenden, was cool ist, da Sie immer die "N letzten Elemente" möchten. Wenn Sie also in absteigender Reihenfolge indizieren, entspricht dies dem Abrufen der "ersten N Elemente". .Dann finden Sie das erste Element Ihrer Sammlung und verwenden seine Indexfeldwerte als Mindestkriterium für eine Suche wie:
Hier ist die Referenz für den min () Cursor: https://docs.mongodb.com/manual/reference/method/cursor.min/
quelle
db.collectionName.find().hint(yourIndex).limit(N)
Wenn der Index in absteigender Reihenfolge ist, erhalten Sie die N Mindestwerte.Möglicherweise möchten Sie die folgenden
find
Optionen verwenden: http://docs.meteor.com/api/collections.html#Mongo-Collection-findquelle
laut mongoDB Dokumentation :
quelle
Verwenden Sie den Operator $ Slice , um Array-Elemente einzuschränken
Wenn die Geolokalisierung ein Datenarray ist, erhalten wir die letzten 5 Datensätze.
quelle
Letzte Funktion sollte
sort
nicht seinlimit
.Beispiel:
quelle
sort
sollte danach seinlimit
?