Maison  >  Article  >  interface Web  >  Pipelines d'agrégation MongoDB

Pipelines d'agrégation MongoDB

PHPz
PHPzoriginal
2024-07-31 20:32:41873parcourir

MongoDB Aggregation Pipelines

Salut les extraterrestres ! Je suis Pavan. Donc, dans ce référentiel, j'expliquerai en profondeur toutes les étapes d'agrégation avec des exemples de base. J'inclurai également des liens vers des ressources pour un apprentissage ultérieur.

Ce référentiel contient donc des fichiers JSON pour divers pipelines d'agrégation MongoDB. Ces pipelines montrent comment utiliser différentes étapes et opérations d'agrégation pour traiter et analyser les données.

Table des matières

  • Présentation
  • Opérations CRUD
  • Étapes d'agrégation
    • $match
    • $groupe
    • $projet
    • $trier
    • $limite
    • $sauter
    • $recherche
    • $se détendre
    • $addFields
    • $replaceRoot
  • Opérations d'agrégation
    • $somme
    • $moy
    • $min
    • $max
    • $premier
    • $dernier
  • Exemples d'ensembles de données
  • Ressources pour un apprentissage ultérieur

Introduction

L'agrégation dans MongoDB est un moyen puissant de traiter et d'analyser les données stockées dans les collections. Il vous permet d'effectuer des opérations telles que le filtrage, le regroupement, le tri et la transformation des données.

Opérations CRUD

Créer

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

Lire

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

Mise à jour

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

Supprimer

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

Étapes d'agrégation

$correspondance

Filtre les documents pour transmettre uniquement les documents qui correspondent aux conditions spécifiées à l'étape suivante du pipeline.

db.orders.aggregate([
  { $match: { "status": "A" } }
]);

$groupe

Regroupe les documents d'entrée par l'expression _id spécifiée et pour chaque regroupement distinct, génère un document. Le champ _id contient le groupe unique par valeur.

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

$projet

Transmet les documents avec les champs demandés à l'étape suivante du pipeline.

db.orders.aggregate([
  { $project: { "order_id": 1, "items": 1, "_id": 0 } }
]);

$trier

Trie tous les documents d'entrée et les renvoie au pipeline dans l'ordre trié.

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

$limite

Lime le nombre de documents transmis à l'étape suivante du pipeline.

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

$ sauter

Ignore les n premiers documents et transmet les documents restants à l'étape suivante du pipeline.

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

$recherche

Effectue une jointure externe gauche avec une autre collection dans la même base de données pour filtrer les documents de la collection "jointe" pour traitement.

db.orders.aggregate([
  {
    $lookup: {
      from: "orderDetails",
      localField: "order_id",
      foreignField: "order_id",
      as: "details"
    }
  }
]);

$se détendre

Déconstruit un champ de tableau à partir des documents d'entrée pour générer un document pour chaque élément.

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

$ajouter des champs

Ajoute de nouveaux champs aux documents.

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

$replaceRoot

Remplace le document d'entrée par le document spécifié.

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

Opérations d'agrégation

somme $

Calcule et renvoie la somme des valeurs numériques. $sum ignore les valeurs non numériques.

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

$moy.

Calcule et renvoie la valeur moyenne des valeurs numériques.

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

$min

Renvoie la valeur minimale à partir des valeurs numériques.

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

$max

Renvoie la valeur maximale à partir des valeurs numériques.

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

$d'abord

Renvoie la première valeur des documents pour chaque groupe.

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

$dernier

Renvoie la dernière valeur des documents pour chaque groupe.

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

Exemples d'ensembles de données

Exemples de documents utilisés pour effectuer des opérations CRUD et agrégation :

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

Ressources pour un apprentissage plus approfondi

  • Documentation de l'agrégation MongoDB
  • Cours universitaires MongoDB
  • Constructeur de pipeline d'agrégation MongoDB

N'hésitez pas à cloner ce référentiel et à expérimenter les pipelines d'agrégation fournis. Si vous avez des questions ou des suggestions, veuillez ouvrir un problème ou soumettre une pull request.

$groupe

Regroupe les commandes par statut et calcule le montant total et le montant moyen pour chaque statut.

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

$projet

Projete l'ID de commande, l'ID client et un champ calculé pour le montant total avec taxe (en supposant 10 % de taxe).

db.orders.aggregate([
  {
    $project: {
      "order_id": 1,
      "cust_id": 1,
      "totalWithTax": { $multiply: ["$amount", 1.1] }
    }
  }
]);

$trier

Trie les commandes d'abord par statut par ordre croissant, puis par montant par ordre décroissant.

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

$limite

Limite le résultat aux 3 premières commandes avec le montant le plus élevé.

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

$ sauter

Saute les 5 premières commandes et renvoie le reste.

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

$recherche

Rejoint la collection de commandes avec une collection orderDetails pour ajouter les détails de la commande.

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn