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.
$first
Neu ab Version 5.0.
Wird von Elastic Cluster nicht unterstützt.
Der $first Operator in Amazon DocumentDB gibt das erste Dokument aus einer gruppierten Gruppe von Dokumenten zurück. Es wird häufig in Aggregationspipelines verwendet, um das erste Dokument abzurufen, das einer bestimmten Bedingung entspricht.
Parameter
-
expression: Der Ausdruck, der als erster Wert in jeder Gruppe zurückgegeben werden soll.
Beispiel (MongoDB Shell)
Das folgende Beispiel veranschaulicht die Verwendung des $first Operators zum Abrufen des ersten Elementwerts, der bei der Aggregation für jede Kategorie gefunden wurde.
Hinweis: $first Gibt das erste Dokument auf der Grundlage der aktuellen Reihenfolge der Dokumente in der Pipeline zurück. Um eine bestimmte Reihenfolge sicherzustellen (z. B. nach Datum, Preis usw.), sollte der $sort $group Phase eine Stufe vorangestellt werden.
Erstellen Sie Musterdokumente
db.products.insertMany([ { _id: 1, item: "abc", price: 10, category: "food" }, { _id: 2, item: "jkl", price: 20, category: "food" }, { _id: 3, item: "xyz", price: 5, category: "toy" }, { _id: 4, item: "abc", price: 5, category: "toy" } ]);
Beispiel für eine Abfrage
db.products.aggregate([ { $group: { _id: "$category", firstItem: { $first: "$item" } } } ]);
Ausgabe
[
{ "_id" : "food", "firstItem" : "abc" },
{ "_id" : "toy", "firstItem" : "xyz" }
]
Beispiel für die Verwendung von Fensteroperatoren (MongoDB Shell)
Neu ab Version 8.0.2.
Der $first Operator kann auch als Fensterbediener auf der $setWindowFields Bühne verwendet werden. In diesem Zusammenhang gibt es den Wert von expression aus dem ersten Dokument in jedem Fenster zurück. Sie geben den Operator unter dem output Feld an und definieren optional die Fenstergrenzen mit einem window Dokument.
Anmerkung
Bei Verwendung als Fensteroperator in $setWindowFields $first ist er auf 100 MB an Zwischendaten begrenzt. Eine Operation, die dieses Limit überschreitet, gibt einen Fehler zurück.
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 ersten (frühesten) Preis zurückhour, der in jeder Partition aufgezeichnet wurde.
db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { firstPrice: { $first: "$price", window: { documents: ["unbounded", "current"] } } } } } ]);
Ausgabe
[
{ "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "firstPrice": 50 },
{ "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "firstPrice": 50 },
{ "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "firstPrice": 50 },
{ "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "firstPrice": 50 },
{ "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "firstPrice": 30 },
{ "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "firstPrice": 30 },
{ "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "firstPrice": 30 }
]
Jedes Dokument wird um den Preis des ersten Dokuments in seinem Fenster erweitert (dem frühesten hour in der Partition). firstPrice
Codebeispiele
Um ein Codebeispiel für die Verwendung des $first Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen sowohl die Verwendung des Akkumulators (in$group) als auch die Verwendung von Fensteroperatoren (in$setWindowFields):