Heim  >  Artikel  >  Web-Frontend  >  MongoDB-Aggregationspipelines

MongoDB-Aggregationspipelines

PHPz
PHPzOriginal
2024-07-31 20:32:41873Durchsuche

MongoDB Aggregation Pipelines

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.

Inhaltsverzeichnis

  • Einführung
  • CRUD-Operationen
  • Aggregationsstufen
    • $match
    • $group
    • $project
    • $sort
    • $-Limit
    • $überspringen
    • $lookup
    • $entspannen
    • $addFields
    • $replaceRoot
  • Aggregationsoperationen
    • $sum
    • $avg
    • $min
    • $max
    • $first
    • $last
  • Beispieldatensätze
  • Ressourcen für weiteres Lernen

Einführung

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.

CRUD-Operationen

Erstellen

db.orders.insertOne({
  "order_id": 26,
  "cust_id": 1006,
  "status": "A",
  "amount": 275,
  "items": ["apple", "banana"],
  "date": "2023-01-26"
});

Lesen

db.orders.find().pretty();

Aktualisieren

db.orders.updateOne(
  { "order_id": 2 },
  {
    $set: { "status": "C", "amount": 500 },
    $currentDate: { "lastModified": true }
  }
);

Löschen

db.orders.deleteOne({ "order_id": 1 });

Aggregationsstufen

$match

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" } }
]);

$gruppe

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" }
    }
  }
]);

$Projekt

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 } }
]);

$sort

Sortiert alle Eingabedokumente und gibt sie in sortierter Reihenfolge an die Pipeline zurück.

db.orders.aggregate([
  { $sort: { "amount": -1 } }
]);

$limit

Begrenzt die Anzahl der Dokumente, die an die nächste Stufe in der Pipeline weitergeleitet werden.

db.orders.aggregate([
  { $limit: 5 }
]);

$überspringen

Überspringt die ersten n Dokumente und übergibt die verbleibenden Dokumente an die nächste Stufe in der Pipeline.

db.orders.aggregate([
  { $skip: 5 }
]);

$lookup

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"
    }
  }
]);

$entspannen

Dekonstruiert ein Array-Feld aus den Eingabedokumenten, um ein Dokument für jedes Element auszugeben.

db.orders.aggregate([
  { $unwind: "$items" }
]);

$addFields

Fügt Dokumenten neue Felder hinzu.

db.orders.aggregate([
  { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } }
]);

$replaceRoot

Ersetzt das Eingabedokument durch das angegebene Dokument.

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);

Aggregationsoperationen

$summe

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" }
    }
  }
]);

$Durchschn

Berechnet den Durchschnittswert der numerischen Werte und gibt ihn zurück.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      averageSpent: { $avg: "$amount" }
    }
  }
]);

$min

Gibt den Mindestwert der numerischen Werte zurück.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      minSpent: { $min: "$amount" }
    }
  }
]);

$max

Gibt den Maximalwert der numerischen Werte zurück.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      maxSpent: { $max: "$amount" }
    }
  }
]);

$zuerst

Gibt den ersten Wert aus den Dokumenten für jede Gruppe zurück.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      firstOrder: { $first: "$amount" }
    }
  }
]);

$zuletzt

Gibt den letzten Wert aus den Dokumenten für jede Gruppe zurück.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      lastOrder: { $last: "$amount" }
    }
  }
]);

Beispieldatensätze

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" }
]

Ressourcen für weiteres Lernen

  • MongoDB-Aggregationsdokumentation
  • MongoDB-Universitätskurse
  • MongoDB Aggregation Pipeline Builder

Sie können dieses Repository gerne klonen und mit den bereitgestellten Aggregationspipelines experimentieren. Wenn Sie Fragen oder Vorschläge haben, öffnen Sie bitte ein Problem oder senden Sie eine Pull-Anfrage.

$gruppe

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" }
    }
  }
]);

$Projekt

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] }
    }
  }
]);

$sort

Sortiert Bestellungen zuerst nach Status in aufsteigender Reihenfolge und dann nach Betrag in absteigender Reihenfolge.

db.orders.aggregate([
  { $sort: { "status": 1, "amount": -1 } }
]);

$limit

Begrenzt das Ergebnis auf die Top-3-Bestellungen mit dem höchsten Betrag.

db.orders.aggregate([
  { $sort: { "amount": -1 } },
  { $limit: 3 }
]);

$überspringen

Überspringt die ersten 5 Bestellungen und sendet den Rest zurück.

db.orders.aggregate([
  { $skip: 5 }
]);

$lookup

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"
    }
  }
]);

$unwind

Deconstructs the items array in each order to output a document for each item.

db.orders.aggregate([
  { $unwind: "$items" }
]);

$addFields

Adds a new field discountedAmount which is 90% of the original amount.

db.orders.aggregate([
  { $addFields: { discountedAmount: { $multiply: ["$amount", 0.9] } } }
]);

$replaceRoot

Replaces the root document with the items array.

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);

$sum

Calculates the total amount for all orders.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      totalAmount: { $sum: "$amount" }
    }
  }
]);

$avg

Calculates the average amount spent per order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      averageAmount: { $avg: "$amount" }
    }
  }
]);

$min

Finds the minimum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      minAmount: { $min: "$amount" }
    }
  }
]);

$max

Finds the maximum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      maxAmount: { $max: "$amount" }
    }
  }
]);

$first

Gets the first order placed (by date).

db.orders.aggregate([
  { $sort: { "date": 1 } },
  {
    $group: {
      _id: null,
      firstOrder: { $first: "$$ROOT" }
    }
  }
]);

$last

Gets the last order placed (by date).

db.orders.aggregate([
  { $sort: { "date": -1 } },
  {
    $group: {
      _id: null,
      lastOrder: { $last: "$$ROOT" }
    }
  }
]);

So, we have covered basic CRUD operations, all major aggregation stages, and operations, and looked into resources for further learning.

Das obige ist der detaillierte Inhalt vonMongoDB-Aggregationspipelines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn