Maison > interface Web > js tutoriel > le corps du texte

Pipelines d'agrégation MongoDB

PHPz
Libérer: 2024-07-31 20:32:41
original
872 Les gens l'ont consulté

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"
});
Copier après la connexion

Lire

db.orders.find().pretty();
Copier après la connexion

Mise à jour

db.orders.updateOne(
  { "order_id": 2 },
  {
    $set: { "status": "C", "amount": 500 },
    $currentDate: { "lastModified": true }
  }
);
Copier après la connexion

Supprimer

db.orders.deleteOne({ "order_id": 1 });
Copier après la connexion

É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" } }
]);
Copier après la connexion

$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" }
    }
  }
]);
Copier après la connexion
Copier après la connexion

$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 } }
]);
Copier après la connexion

$trier

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

db.orders.aggregate([
  { $sort: { "amount": -1 } }
]);
Copier après la connexion

$limite

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

db.orders.aggregate([
  { $limit: 5 }
]);
Copier après la connexion

$ sauter

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

db.orders.aggregate([
  { $skip: 5 }
]);
Copier après la connexion
Copier après la connexion

$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"
    }
  }
]);
Copier après la connexion
Copier après la connexion

$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" }
]);
Copier après la connexion
Copier après la connexion

$ajouter des champs

Ajoute de nouveaux champs aux documents.

db.orders.aggregate([
  { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } }
]);
Copier après la connexion

$replaceRoot

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

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);
Copier après la connexion
Copier après la connexion

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" }
    }
  }
]);
Copier après la connexion
Copier après la connexion

$moy.

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

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      averageSpent: { $avg: "$amount" }
    }
  }
]);
Copier après la connexion

$min

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

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      minSpent: { $min: "$amount" }
    }
  }
]);
Copier après la connexion

$max

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

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      maxSpent: { $max: "$amount" }
    }
  }
]);
Copier après la connexion

$d'abord

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

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      firstOrder: { $first: "$amount" }
    }
  }
]);
Copier après la connexion

$dernier

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

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      lastOrder: { $last: "$amount" }
    }
  }
]);
Copier après la connexion

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" }
]
Copier après la connexion

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" }
    }
  }
]);
Copier après la connexion

$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] }
    }
  }
]);
Copier après la connexion

$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 } }
]);
Copier après la connexion

$limite

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

db.orders.aggregate([
  { $sort: { "amount": -1 } },
  { $limit: 3 }
]);
Copier après la connexion

$ sauter

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

db.orders.aggregate([
  { $skip: 5 }
]);
Copier après la connexion
Copier après la connexion

$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"
    }
  }
]);
Copier après la connexion
Copier après la connexion

$unwind

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

db.orders.aggregate([
  { $unwind: "$items" }
]);
Copier après la connexion
Copier après la connexion

$addFields

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

db.orders.aggregate([
  { $addFields: { discountedAmount: { $multiply: ["$amount", 0.9] } } }
]);
Copier après la connexion

$replaceRoot

Replaces the root document with the items array.

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);
Copier après la connexion
Copier après la connexion

$sum

Calculates the total amount for all orders.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      totalAmount: { $sum: "$amount" }
    }
  }
]);
Copier après la connexion

$avg

Calculates the average amount spent per order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      averageAmount: { $avg: "$amount" }
    }
  }
]);
Copier après la connexion

$min

Finds the minimum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      minAmount: { $min: "$amount" }
    }
  }
]);
Copier après la connexion

$max

Finds the maximum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      maxAmount: { $max: "$amount" }
    }
  }
]);
Copier après la connexion

$first

Gets the first order placed (by date).

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

$last

Gets the last order placed (by date).

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

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!