Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
$last
Der $last Operator in Amazon DocumentDB wird verwendet, um das letzte Element in einem Array zurückzugeben, das den Abfragekriterien entspricht. Es ist besonders nützlich, um das neueste oder letzte Element in einem Array abzurufen, das eine bestimmte Bedingung erfüllt.
Parameter
-
expression: Der Ausdruck, der den Array-Elementen entspricht.
Beispiel (MongoDB Shell)
Das folgende Beispiel zeigt die Verwendung des $last Operators in Kombination mit $filter zum Abrufen des letzten Elements aus einem Array, das eine bestimmte Bedingung erfüllt (z. B. ist das Thema „Wissenschaft“).
Erstellen Sie Beispieldokumente
db.collection.insertMany([ { "_id": 1, "name": "John", "scores": [ { "subject": "math", "score": 82 }, { "subject": "english", "score": 85 }, { "subject": "science", "score": 90 } ] }, { "_id": 2, "name": "Jane", "scores": [ { "subject": "math", "score": 92 }, { "subject": "english", "score": 88 }, { "subject": "science", "score": 87 } ] }, { "_id": 3, "name": "Bob", "scores": [ { "subject": "math", "score": 75 }, { "subject": "english", "score": 80 }, { "subject": "science", "score": 85 } ] } ]);
Beispiel für eine Abfrage
db.collection.aggregate([ { $match: { name: "John" } }, { $project: { name: 1, lastScienceScore: { $last: { $filter: { input: "$scores", as: "score", cond: { $eq: ["$$score.subject", "science"] } } } } } } ]);
Ausgabe
[
{
_id: 1,
name: 'John',
lastScienceScore: { subject: 'science', score: 90 }
}
]
Beispiel für die Verwendung von Fensteroperatoren (MongoDB Shell)
Neu ab Version 8.0.2.
Der $last Operator kann auch als Fensterbediener auf der $setWindowFields Bühne verwendet werden. In diesem Zusammenhang gibt es den Wert des expression letzten Dokuments in jedem Fenster zurück. Sie geben den Operator unter dem output Feld an und definieren optional die Fenstergrenzen mit einem window Dokument.
Erstellen Sie Beispieldokumente
db.stockPrices.insertMany([ { _id: 1, ticker: "ABC", hour: 1, price: 50 }, { _id: 2, ticker: "ABC", hour: 2, price: 45 }, { _id: 3, ticker: "ABC", hour: 3, price: 60 }, { _id: 4, ticker: "ABC", hour: 4, price: 40 }, { _id: 5, ticker: "XYZ", hour: 1, price: 30 }, { _id: 6, ticker: "XYZ", hour: 2, price: 35 }, { _id: 7, ticker: "XYZ", hour: 3, price: 25 } ]);
Beispiel für eine Abfrage
Das folgende Beispiel partitioniert die Dokumente nachticker, sortiert jede Partition nach und gibt den letzten (letzten) Preis zurückhour, der in jeder Partition aufgezeichnet wurde.
db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { lastPrice: { $last: "$price", window: { documents: ["unbounded", "unbounded"] } } } } } ]);
Ausgabe
[
{ "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "lastPrice": 40 },
{ "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "lastPrice": 40 },
{ "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "lastPrice": 40 },
{ "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "lastPrice": 40 },
{ "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "lastPrice": 25 },
{ "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "lastPrice": 25 },
{ "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "lastPrice": 25 }
]
Jedes Dokument wird um den Preis des letzten Dokuments in seinem Fenster erweitert (das letzte Dokument hour in der Partition). lastPrice
Codebeispiele
Um ein Codebeispiel für die Verwendung des $last Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen sowohl die Verwendung von Ausdrücken (in$project) als auch die Verwendung von Fensteroperatoren (in$setWindowFields):