Abrufen der letzten N Datensätze in MongoDB

Mehvish Ashiq 13 Juni 2022
Abrufen der letzten N Datensätze in MongoDB

In diesem Tutorial wird die Anzahl der Möglichkeiten zum Abrufen der letzten N Datensätze in MongoDB untersucht, wobei N eine positive Zahl und größer als Null ist. Wir werden sehen, wie Sie die Anzahl der Dokumente mit und ohne Sortierung abrufen können.

Abrufen der letzten N Datensätze in MongoDB

Wir müssen eine Sammlung von Dokumenten haben, um mit den praktischen Beispielen fortzufahren. Lassen Sie uns also fortfahren und die folgenden Abfragen verwenden, um eine Sammlung zu erstellen und einige Dokumente darin einzufügen.

Beispielcode:

> use get_n_records;
> db.createCollection('stock');
> db.stock.insertMany([
    {"item": "abc", "quantity": 12},
    {"item": "def", "quantity": 234},
    {"item": "ghi", "quantity": 45},
    {"item": "jkl", "quantity": 345},
    {"item": "mno", "quantity": 243},
    {"item": "pqr", "quantity": 345},
    {"item": "stu", "quantity": 56},
    {"item": "vwx", "quantity": 575},
    {"item": "yzz", "quantity": 398}
]);
> db.stock.find();

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e75fb"), "item" : "abc", "quantity" : 12 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fc"), "item" : "def", "quantity" : 234 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fd"), "item" : "ghi", "quantity" : 45 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fe"), "item" : "jkl", "quantity" : 345 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75ff"), "item" : "mno", "quantity" : 243 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7600"), "item" : "pqr", "quantity" : 345 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7601"), "item" : "stu", "quantity" : 56 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7602"), "item" : "vwx", "quantity" : 575 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7603"), "item" : "yzz", "quantity" : 398 }

Jetzt haben wir unsere Sammlung fertig und gefüllt. Der Punkt ist zu überlegen, ob wir die letzten N Datensätze von den neuesten zu den weniger aktuellen eingefügten Dokumenten oder umgekehrt erhalten möchten.

Lassen Sie uns jedes der unten angegebenen Szenarien lernen.

Abrufen der letzten N Datensätze von den jüngsten zu den weniger jüngsten eingefügten Dokumenten oder umgekehrt

Bevor Sie fortfahren, werfen Sie einen Blick auf die folgenden zwei Begriffe, um sie leicht zu verstehen:

  1. Sortierung von Neusten nach weniger Neuen

    Es bedeutet Last In First Out (absteigende Reihenfolge). Die zuletzt eingefügten Dokumente werden zuerst angezeigt.

  2. Sortierung von weniger aktuell nach aktuell

    Es bedeutet First In First Out (aufsteigende Reihenfolge). Die zuerst eingefügten Dokumente werden zuerst angezeigt.

Verwenden Sie die Methode cursor.sort(), um die letzten N Datensätze von den neusten bis zu den weniger neu eingefügten Dokumenten oder umgekehrt zu erhalten

Beispielcode (Last In First Out):

> db.stock.find().sort({_id:-1}).limit(3);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e7603"), "item" : "yzz", "quantity" : 398 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7602"), "item" : "vwx", "quantity" : 575 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7601"), "item" : "stu", "quantity" : 56 }

Beispielcode (First In First Out):

> db.stock.find().sort({_id:1}).limit(3);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e75fb"), "item" : "abc", "quantity" : 12 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fc"), "item" : "def", "quantity" : 234 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fd"), "item" : "ghi", "quantity" : 45 }

Hier verwenden wir die Methode sort(), um die Dokumente von der neuesten zur weniger aktuellen Insertionsreihenfolge (absteigende Reihenfolge) zu sortieren. Wir wenden also die Methode sort() auf den Cursor an, bevor wir Dokumente (Datensätze) aus der Datenbank abrufen.

Die Methode sort() hat das Feld-Wert-Paar als {field: value}, und wir können eine Sortierung mit maximal 32 Schlüsseln durchführen. Die Dokumente werden bei Verwendung von MongoDB nicht in einer bestimmten Reihenfolge in einer Sammlung gespeichert.

Wenn wir also eine Sortierung für ein bestimmtes Feld mit doppelten Werten durchführen, können die Dokumente mit diesen Werten in beliebiger Reihenfolge zurückgegeben werden. Um eine konsistente Sortierung zu erhalten, müssen wir mindestens ein Feld mit den eindeutigen Werten einfügen.

Der einfachste Weg, dies sicherzustellen, ist das Feld _id in der Methode sort().

Das limit(N) wird verwendet, um die angegebene Anzahl von Dokumenten zu erhalten. Wir können diese Funktion weglassen, wenn wir daran interessiert sind, alle sortierten Dokumente zu erhalten.

Alternativ können wir die Abfrage auch ohne ein bestimmtes Feld wie folgt verwenden.

Beispielcode:

> db.stock.find().sort({$natural:1}).limit(3);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e75fb"), "item" : "abc", "quantity" : 12 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fc"), "item" : "def", "quantity" : 234 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fd"), "item" : "ghi", "quantity" : 45 }

Das $natural funktioniert wie First In First Out und Last In First Out, wenn ihr Wert jeweils 1 und -1 ist. Wir können es verwenden, wenn wir die MongoDB-Version 4.4 oder höher haben.

Verwenden Sie die Phasen $sort und $limit (Aggregation), um die letzten N Datensätze von den neusten bis zu den weniger neu eingefügten Dokumenten oder umgekehrt zu erhalten

Beispielcode (Last In First Out):

> db.stock.aggregate([
     { $sort : { _id : -1 } },
     { $limit : 4 }
]);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e7603"), "item" : "yzz", "quantity" : 398 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7602"), "item" : "vwx", "quantity" : 575 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7601"), "item" : "stu", "quantity" : 56 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7600"), "item" : "pqr", "quantity" : 345 }

Beispielcode (First In First Out):

> db.stock.aggregate([
     { $sort : { _id : 1 } },
     { $limit : 4 }
]);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e75fb"), "item" : "abc", "quantity" : 12 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fc"), "item" : "def", "quantity" : 234 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fd"), "item" : "ghi", "quantity" : 45 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fe"), "item" : "jkl", "quantity" : 345 }

Die Aggregationsstufe $sort ähnelt der Methode cursor.sort(). Es wird verwendet, um alle Dokumente zu sortieren und sie in sortierter Reihenfolge an eine Pipeline zurückzugeben.

Es nimmt ein Dokument mit dem Feldnamen und der entsprechenden Sortierreihenfolge. Denken Sie daran, dass 1 und -1 für aufsteigende und absteigende Reihenfolge verwendet werden.

Wie die Methode cursor.sort() können wir die Aggregationsstufe $sort verwenden, um nach maximal 32 Schlüsseln zu sortieren und mindestens ein Feld (mit eindeutigen Werten) für eine konsistente Sortierreihenfolge zu haben.

Die Sortierreihenfolge wird von links nach rechts bewertet, wenn wir nach mehreren Feldern sortieren müssen. Während das $limit eine Zahl annimmt, die anzeigt, wie viele Dokumente auf dem Bildschirm gedruckt werden müssen; Außerdem hat es eine 64-Bit-Ganzzahlbegrenzung.

Verwenden Sie die Methoden skip() und count() zusammen, um die letzten N Datensätze in MongoDB abzurufen

Dieser Ansatz besticht dadurch, dass wir die Daten nicht sortieren, sondern einen Ausschnitt der Dokumente von Anfang oder Ende unter Berücksichtigung der Projektanforderungen erhalten.

Beispielcode (erhalten Sie die ersten 3 Datensätze, ohne die Dokumente zu sortieren):

> db.stock.find().limit(3);

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e75fb"), "item" : "abc", "quantity" : 12 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fc"), "item" : "def", "quantity" : 234 }
{ "_id" : ObjectId("629ac651b7e637e64d8e75fd"), "item" : "ghi", "quantity" : 45 }

Beispielcode (Letzte 3 Datensätze abrufen, ohne die Dokumente zu sortieren):

> db.stock.find().skip(db.stock.count() - 3)

AUSGANG:

{ "_id" : ObjectId("629ac651b7e637e64d8e7601"), "item" : "stu", "quantity" : 56 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7602"), "item" : "vwx", "quantity" : 575 }
{ "_id" : ObjectId("629ac651b7e637e64d8e7603"), "item" : "yzz", "quantity" : 398 }

In diesem Beispiel verwenden wir db.stock.count(), um die Gesamtzahl der Dokumente zu zählen, ziehen 3 davon ab und überspringen alle mit der skip()-Methode.

Denken Sie daran, dass die Anzahl der subtrahierten Dokumente nicht übersprungen wird (in diesem Fall sind es 3). Diese 3 Dokumente erhalten wir als Ergebnis.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MongoDB Record