Heim > Web-Frontend > js-Tutorial > Hauptteil

MongoDB-Aggregationspipelines

PHPz
Freigeben: 2024-07-31 20:32:41
Original
872 Leute haben es durchsucht

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"
});
Nach dem Login kopieren

Lesen

db.orders.find().pretty();
Nach dem Login kopieren

Aktualisieren

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

Löschen

db.orders.deleteOne({ "order_id": 1 });
Nach dem Login kopieren

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" } }
]);
Nach dem Login kopieren

$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" }
    }
  }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$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 } }
]);
Nach dem Login kopieren

$sort

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

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

$limit

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

db.orders.aggregate([
  { $limit: 5 }
]);
Nach dem Login kopieren

$überspringen

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

db.orders.aggregate([
  { $skip: 5 }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$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"
    }
  }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$entspannen

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

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

$addFields

Fügt Dokumenten neue Felder hinzu.

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

$replaceRoot

Ersetzt das Eingabedokument durch das angegebene Dokument.

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

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" }
    }
  }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$Durchschn

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

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

$min

Gibt den Mindestwert der numerischen Werte zurück.

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

$max

Gibt den Maximalwert der numerischen Werte zurück.

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

$zuerst

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

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

$zuletzt

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

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

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" }
]
Nach dem Login kopieren

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" }
    }
  }
]);
Nach dem Login kopieren

$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] }
    }
  }
]);
Nach dem Login kopieren

$sort

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

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

$limit

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

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

$überspringen

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

db.orders.aggregate([
  { $skip: 5 }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$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"
    }
  }
]);
Nach dem Login kopieren
Nach dem Login kopieren

$unwind

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

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

$addFields

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

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

$replaceRoot

Replaces the root document with the items array.

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

$sum

Calculates the total amount for all orders.

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

$avg

Calculates the average amount spent per order.

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

$min

Finds the minimum amount spent on an order.

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

$max

Finds the maximum amount spent on an order.

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

$first

Gets the first order placed (by date).

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

$last

Gets the last order placed (by date).

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

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!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!