690 Stimmen

Wie erhält man die letzten N Datensätze in mongodb?

Ich kann nirgends finden, dass dies dokumentiert wurde. Standardmäßig erhält die find()-Operation die Datensätze vom Anfang an. Wie kann ich die letzten N Datensätze in Mongodb abrufen?

Bearbeiten: Außerdem möchte ich, dass die Ergebnisse in der Reihenfolge vom jüngsten zum neuesten Ergebnis zurückgegeben werden, nicht umgekehrt.

952voto

Justin Jenkins Punkte 25601

Wenn ich Ihre Frage richtig verstehe, müssen Sie in aufsteigender Reihenfolge sortieren.

Angenommen, Sie haben ein Id- oder Datumsfeld mit dem Namen "x", dann würden Sie ...

.sort()


db.foo.find().sort({x:1});

El 1 wird aufsteigend sortiert (älteste bis neueste) und -1 wird absteigend sortiert (neueste bis älteste.)

Wenn Sie die automatisch erstellte _id Feld ist ein Datum eingebettet ... Sie können es also verwenden, um nach ... zu sortieren.

db.foo.find().sort({_id:1});

So erhalten Sie alle Ihre Dokumente sortiert von der ältesten bis zur neuesten Version zurück.

Natürliche Ordnung


Sie können auch eine Natürliche Ordnung oben erwähnt ...

db.foo.find().sort({$natural:1});

Auch hier gilt, dass 1 o -1 je nach der von Ihnen gewünschten Reihenfolge.

.limit() verwenden


Schließlich ist es gute Praxis, eine Grenze hinzuzufügen, wenn diese Art von weit offener Abfrage zu tun, so dass Sie entweder tun könnte ...

db.foo.find().sort({_id:1}).limit(50);

oder

db.foo.find().sort({$natural:1}).limit(50);

167voto

Die letzte N Die hinzugefügten Datensätze, von den jüngsten bis zu den jüngsten, können mit dieser Abfrage eingesehen werden:

db.collection.find().skip(db.collection.count() - N)

Wenn Sie sie in umgekehrter Reihenfolge haben wollen:

db.collection.find().sort({ $natural: -1 }).limit(N)

Wenn Sie Folgendes installieren Mongo-Hacker können Sie auch verwenden:

db.collection.find().reverse().limit(N)

Wenn Sie es leid sind, diese Befehle immer wieder zu schreiben, können Sie in Ihrer ~/.mongorc.js eigene Funktionen erstellen. Z.B..

function last(N) {
    return db.collection.find().skip(db.collection.count() - N);
}

dann geben Sie von einer Mongo-Shell aus einfach ein last(N)

23voto

Ashwini Punkte 687

Um die letzten N Datensätze zu erhalten, können Sie die folgende Abfrage ausführen:

db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)

wenn Sie nur einen letzten Datensatz wünschen:

db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})

Anmerkung: Anstelle von $natural können Sie eine der Spalten aus Ihrer Sammlung verwenden.

23voto

João Otero Punkte 876

Das Sortieren, Überspringen usw. kann je nach Größe der Sammlung ziemlich langsam sein.

Eine bessere Leistung würde erreicht, wenn Sie Ihre Sammlung durch einige Kriterien indiziert haben; und dann könnten Sie min()-Cursor verwenden:

Indizieren Sie zunächst Ihre Sammlung mit db.collectionName.setIndex( yourIndex ) Sie können auf- oder absteigende Reihenfolge verwenden, was cool ist, weil Sie immer die "N letzten Elemente" wollen... wenn Sie also durch absteigende Reihenfolge indizieren, ist es das gleiche wie die "ersten N Elemente" zu bekommen.

Dann suchen Sie das erste Element Ihrer Sammlung und verwenden dessen Indexfeldwerte als Mindestkriterien in einer Suche wie:

db.collectionName.find().min(minCriteria).hint(yourIndex).limit(N)

Hier ist die Referenz für den min()-Cursor: https://docs.mongodb.com/manual/reference/method/cursor.min/

15voto

satywan kumar Punkte 139
 db.collection.find().sort({$natural: -1 }).limit(5)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X