Maison >interface Web >js tutoriel >Pipelines d'agrégation MongoDB
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.
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.
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 });
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" } } ]);
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" } } } ]);
Transmet les documents avec les champs demandés à l'étape suivante du pipeline.
db.orders.aggregate([ { $project: { "order_id": 1, "items": 1, "_id": 0 } } ]);
Trie tous les documents d'entrée et les renvoie au pipeline dans l'ordre trié.
db.orders.aggregate([ { $sort: { "amount": -1 } } ]);
Lime le nombre de documents transmis à l'étape suivante du pipeline.
db.orders.aggregate([ { $limit: 5 } ]);
Ignore les n premiers documents et transmet les documents restants à l'étape suivante du pipeline.
db.orders.aggregate([ { $skip: 5 } ]);
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" } } ]);
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" } ]);
Ajoute de nouveaux champs aux documents.
db.orders.aggregate([ { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } } ]);
Remplace le document d'entrée par le document spécifié.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
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" } } } ]);
Calcule et renvoie la valeur moyenne des valeurs numériques.
db.orders.aggregate([ { $group: { _id: "$cust_id", averageSpent: { $avg: "$amount" } } } ]);
Renvoie la valeur minimale à partir des valeurs numériques.
db.orders.aggregate([ { $group: { _id: "$cust_id", minSpent: { $min: "$amount" } } } ]);
Renvoie la valeur maximale à partir des valeurs numériques.
db.orders.aggregate([ { $group: { _id: "$cust_id", maxSpent: { $max: "$amount" } } } ]);
Renvoie la première valeur des documents pour chaque groupe.
db.orders.aggregate([ { $group: { _id: "$cust_id", firstOrder: { $first: "$amount" } } } ]);
Renvoie la dernière valeur des documents pour chaque groupe.
db.orders.aggregate([ { $group: { _id: "$cust_id", lastOrder: { $last: "$amount" } } } ]);
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" } ]
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" } } } ]);
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] } } } ]);
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 le résultat aux 3 premières commandes avec le montant le plus élevé.
db.orders.aggregate([ { $sort: { "amount": -1 } }, { $limit: 3 } ]);
Saute les 5 premières commandes et renvoie le reste.
db.orders.aggregate([ { $skip: 5 } ]);
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" } } ]);
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" } } } ]);
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!