Heim >Web-Frontend >js-Tutorial >MongoDB-Aggregationspipelines
Hallo, Außerirdische! Ich bin Pavan. Daher werde ich in diesem Repository alle Aggregationsstufen anhand grundlegender Beispiele ausführlich erläutern. Ich werde auch Links zu Ressourcen für weiteres Lernen hinzufügen.
Dieses Repository enthält also JSON-Dateien für verschiedene MongoDB-Aggregationspipelines. Diese Pipelines veranschaulichen, wie verschiedene Aggregationsstufen und -vorgänge zum Verarbeiten und Analysieren von Daten verwendet werden.
Aggregation in MongoDB ist eine leistungsstarke Möglichkeit, in Sammlungen gespeicherte Daten zu verarbeiten und zu analysieren. Es ermöglicht Ihnen, Vorgänge wie das Filtern, Gruppieren, Sortieren und Transformieren von Daten durchzuführen.
db.orders.insertOne({ "order_id": 26, "cust_id": 1006, "status": "A", "amount": 275, "items": ["apple", "banana"], "date": "2023-01-26" });
db.orders.find().pretty();
db.orders.updateOne( { "order_id": 2 }, { $set: { "status": "C", "amount": 500 }, $currentDate: { "lastModified": true } } );
db.orders.deleteOne({ "order_id": 1 });
Filtert die Dokumente, um nur die Dokumente, die die angegebenen Bedingungen erfüllen, an die nächste Pipeline-Stufe weiterzuleiten.
db.orders.aggregate([ { $match: { "status": "A" } } ]);
Gruppiert Eingabedokumente nach dem angegebenen _id-Ausdruck und gibt für jede einzelne Gruppierung ein Dokument aus. Das Feld _id enthält den eindeutigen Gruppierungswert.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
Gibt die Dokumente mit den angeforderten Feldern an die nächste Stufe in der Pipeline weiter.
db.orders.aggregate([ { $project: { "order_id": 1, "items": 1, "_id": 0 } } ]);
Sortiert alle Eingabedokumente und gibt sie in sortierter Reihenfolge an die Pipeline zurück.
db.orders.aggregate([ { $sort: { "amount": -1 } } ]);
Begrenzt die Anzahl der Dokumente, die an die nächste Stufe in der Pipeline weitergeleitet werden.
db.orders.aggregate([ { $limit: 5 } ]);
Überspringt die ersten n Dokumente und übergibt die verbleibenden Dokumente an die nächste Stufe in der Pipeline.
db.orders.aggregate([ { $skip: 5 } ]);
Führt eine linke äußere Verknüpfung mit einer anderen Sammlung in derselben Datenbank durch, um Dokumente aus der „verbundenen“ Sammlung zur Verarbeitung einzufiltern.
db.orders.aggregate([ { $lookup: { from: "orderDetails", localField: "order_id", foreignField: "order_id", as: "details" } } ]);
Dekonstruiert ein Array-Feld aus den Eingabedokumenten, um ein Dokument für jedes Element auszugeben.
db.orders.aggregate([ { $unwind: "$items" } ]);
Fügt Dokumenten neue Felder hinzu.
db.orders.aggregate([ { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } } ]);
Ersetzt das Eingabedokument durch das angegebene Dokument.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
Berechnet die Summe numerischer Werte und gibt sie zurück. $sum ignoriert nicht numerische Werte.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
Berechnet den Durchschnittswert der numerischen Werte und gibt ihn zurück.
db.orders.aggregate([ { $group: { _id: "$cust_id", averageSpent: { $avg: "$amount" } } } ]);
Gibt den Mindestwert der numerischen Werte zurück.
db.orders.aggregate([ { $group: { _id: "$cust_id", minSpent: { $min: "$amount" } } } ]);
Gibt den Maximalwert der numerischen Werte zurück.
db.orders.aggregate([ { $group: { _id: "$cust_id", maxSpent: { $max: "$amount" } } } ]);
Gibt den ersten Wert aus den Dokumenten für jede Gruppe zurück.
db.orders.aggregate([ { $group: { _id: "$cust_id", firstOrder: { $first: "$amount" } } } ]);
Gibt den letzten Wert aus den Dokumenten für jede Gruppe zurück.
db.orders.aggregate([ { $group: { _id: "$cust_id", lastOrder: { $last: "$amount" } } } ]);
Beispieldokumente, die zur Durchführung von CRUD- und Aggregationsvorgängen verwendet werden:
[ { "order_id": 1, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "banana"], "date": "2023-01-01" }, { "order_id": 2, "cust_id": 1002, "status": "B", "amount": 450, "items": ["orange", "grape"], "date": "2023-01-02" }, { "order_id": 3, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-03" }, { "order_id": 4, "cust_id": 1003, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-04" }, { "order_id": 5, "cust_id": 1002, "status": "C", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-05" }, { "order_id": 6, "cust_id": 1004, "status": "A", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-06" }, { "order_id": 7, "cust_id": 1005, "status": "B", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-07" }, { "order_id": 8, "cust_id": 1003, "status": "A", "amount": 100, "items": ["apple", "orange"], "date": "2023-01-08" }, { "order_id": 9, "cust_id": 1004, "status": "C", "amount": 400, "items": ["banana", "grape"], "date": "2023-01-09" }, { "order_id": 10, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "grape"], "date": "2023-01-10" }, { "order_id": 11, "cust_id": 1002, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-11" }, { "order_id": 12, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "orange"], "date": "2023-01-12" }, { "order_id": 13, "cust_id": 1005, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-13" }, { "order_id": 14, "cust_id": 1004, "status": "C ", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-14" }, { "order_id": 15, "cust_id": 1002, "status": "A", "amount": 300, "items": ["orange", "grape"], "date": "2023-01-15" }, { "order_id": 16, "cust_id": 1003, "status": "B", "amount": 200, "items": ["apple", "banana"], "date": "2023-01-16" }, { "order_id": 17, "cust_id": 1001, "status": "A", "amount": 250, "items": ["orange", "grape"], "date": "2023-01-17" }, { "order_id": 18, "cust_id": 1005, "status": "A", "amount": 350, "items": ["apple", "banana"], "date": "2023-01-18" }, { "order_id": 19, "cust_id": 1004, "status": "C", "amount": 400, "items": ["orange", "grape"], "date": "2023-01-19" }, { "order_id": 20, "cust_id": 1001, "status": "B", "amount": 150, "items": ["apple", "orange"], "date": "2023-01-20" }, { "order_id": 21, "cust_id": 1002, "status": "A", "amount": 500, "items": ["banana", "grape"], "date": "2023-01-21" }, { "order_id": 22, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "banana"], "date": "2023-01-22" }, { "order_id": 23, "cust_id": 1004, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-23" }, { "order_id": 24, "cust_id": 1005, "status": "A", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-24" }, { "order_id": 25, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-25" } ]
Gruppiert Bestellungen nach Status und berechnet den Gesamtbetrag und den Durchschnittsbetrag für jeden Status.
db.orders.aggregate([ { $group: { _id: "$status", totalAmount: { $sum: "$amount" }, averageAmount: { $avg: "$amount" } } } ]);
Projiziert die Bestell-ID, die Kunden-ID und ein berechnetes Feld für den Gesamtbetrag mit Steuer (unter der Annahme von 10 % Steuer).
db.orders.aggregate([ { $project: { "order_id": 1, "cust_id": 1, "totalWithTax": { $multiply: ["$amount", 1.1] } } } ]);
Sortiert Bestellungen zuerst nach Status in aufsteigender Reihenfolge und dann nach Betrag in absteigender Reihenfolge.
db.orders.aggregate([ { $sort: { "status": 1, "amount": -1 } } ]);
Begrenzt das Ergebnis auf die Top-3-Bestellungen mit dem höchsten Betrag.
db.orders.aggregate([ { $sort: { "amount": -1 } }, { $limit: 3 } ]);
Überspringt die ersten 5 Bestellungen und sendet den Rest zurück.
db.orders.aggregate([ { $skip: 5 } ]);
Verknüpft die Auftragssammlung mit einer orderDetails-Sammlung, um Bestelldetails hinzuzufügen.
db.orders.aggregate([ { $lookup: { from: "orderDetails", localField: "order_id", foreignField: "order_id", as: "details" } } ]);
Deconstructs the items array in each order to output a document for each item.
db.orders.aggregate([ { $unwind: "$items" } ]);
Adds a new field discountedAmount which is 90% of the original amount.
db.orders.aggregate([ { $addFields: { discountedAmount: { $multiply: ["$amount", 0.9] } } } ]);
Replaces the root document with the items array.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
Calculates the total amount for all orders.
db.orders.aggregate([ { $group: { _id: null, totalAmount: { $sum: "$amount" } } } ]);
Calculates the average amount spent per order.
db.orders.aggregate([ { $group: { _id: null, averageAmount: { $avg: "$amount" } } } ]);
Finds the minimum amount spent on an order.
db.orders.aggregate([ { $group: { _id: null, minAmount: { $min: "$amount" } } } ]);
Finds the maximum amount spent on an order.
db.orders.aggregate([ { $group: { _id: null, maxAmount: { $max: "$amount" } } } ]);
Gets the first order placed (by date).
db.orders.aggregate([ { $sort: { "date": 1 } }, { $group: { _id: null, firstOrder: { $first: "$$ROOT" } } } ]);
Gets the last order placed (by date).
db.orders.aggregate([ { $sort: { "date": -1 } }, { $group: { _id: null, lastOrder: { $last: "$$ROOT" } } } ]);
Das obige ist der detaillierte Inhalt vonMongoDB-Aggregationspipelines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!