Rumah >hujung hadapan web >tutorial js >Talian Paip Pengagregatan MongoDB
Hai, makhluk asing! Saya Pavan. Jadi dalam repositori ini, saya akan menerangkan semua peringkat pengagregatan secara mendalam dengan contoh asas. Saya juga akan menyertakan pautan kepada sumber untuk pembelajaran lanjut.
Jadi repositori ini mengandungi fail JSON untuk pelbagai saluran paip pengagregatan MongoDB. Saluran paip ini menunjukkan cara menggunakan peringkat dan operasi pengagregatan yang berbeza untuk memproses dan menganalisis data.
Pengagregatan dalam MongoDB ialah cara yang berkuasa untuk memproses dan menganalisis data yang disimpan dalam koleksi. Ia membolehkan anda melakukan operasi seperti menapis, mengumpulkan, mengisih dan mengubah data.
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 });
Menapis dokumen untuk menghantar hanya dokumen yang sepadan dengan syarat yang ditentukan ke peringkat saluran paip seterusnya.
db.orders.aggregate([ { $match: { "status": "A" } } ]);
Kumpulkan dokumen input mengikut ungkapan _id yang ditentukan dan untuk setiap kumpulan yang berbeza, mengeluarkan dokumen. Medan _id mengandungi kumpulan unik mengikut nilai.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
Mengirim bersama dokumen dengan medan yang diminta ke peringkat seterusnya dalam perancangan.
db.orders.aggregate([ { $project: { "order_id": 1, "items": 1, "_id": 0 } } ]);
Isih semua dokumen input dan mengembalikannya ke saluran paip dalam tertib diisih.
db.orders.aggregate([ { $sort: { "amount": -1 } } ]);
Menghadkan bilangan dokumen yang dihantar ke peringkat seterusnya dalam perancangan.
db.orders.aggregate([ { $limit: 5 } ]);
Melangkau n dokumen pertama dan menyerahkan dokumen yang tinggal ke peringkat seterusnya dalam perancangan.
db.orders.aggregate([ { $skip: 5 } ]);
Melakukan gabungan luar kiri ke koleksi lain dalam pangkalan data yang sama untuk menapis dalam dokumen daripada koleksi "bergabung" untuk diproses.
db.orders.aggregate([ { $lookup: { from: "orderDetails", localField: "order_id", foreignField: "order_id", as: "details" } } ]);
Nyahbina medan tatasusunan daripada dokumen input untuk mengeluarkan dokumen bagi setiap elemen.
db.orders.aggregate([ { $unwind: "$items" } ]);
Menambah medan baharu pada dokumen.
db.orders.aggregate([ { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } } ]);
Menggantikan dokumen input dengan dokumen yang ditentukan.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
Mengira dan mengembalikan jumlah nilai berangka. $sum mengabaikan nilai bukan angka.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
Mengira dan mengembalikan nilai purata nilai berangka.
db.orders.aggregate([ { $group: { _id: "$cust_id", averageSpent: { $avg: "$amount" } } } ]);
Mengembalikan nilai minimum daripada nilai angka.
db.orders.aggregate([ { $group: { _id: "$cust_id", minSpent: { $min: "$amount" } } } ]);
Mengembalikan nilai maksimum daripada nilai angka.
db.orders.aggregate([ { $group: { _id: "$cust_id", maxSpent: { $max: "$amount" } } } ]);
Mengembalikan nilai pertama daripada dokumen untuk setiap kumpulan.
db.orders.aggregate([ { $group: { _id: "$cust_id", firstOrder: { $first: "$amount" } } } ]);
Mengembalikan nilai terakhir daripada dokumen untuk setiap kumpulan.
db.orders.aggregate([ { $group: { _id: "$cust_id", lastOrder: { $last: "$amount" } } } ]);
Contoh dokumen yang digunakan untuk melaksanakan CRUD dan operasi pengagregatan:
[ { "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" } ]
Kumpulkan pesanan mengikut status dan mengira jumlah amaun dan amaun purata untuk setiap status.
db.orders.aggregate([ { $group: { _id: "$status", totalAmount: { $sum: "$amount" }, averageAmount: { $avg: "$amount" } } } ]);
Memproyeksikan ID pesanan, ID pelanggan dan medan yang dikira untuk jumlah keseluruhan dengan cukai (dengan andaian 10% cukai).
db.orders.aggregate([ { $project: { "order_id": 1, "cust_id": 1, "totalWithTax": { $multiply: ["$amount", 1.1] } } } ]);
Isih pesanan dahulu mengikut status dalam tertib menaik dan kemudian mengikut amaun dalam tertib menurun.
db.orders.aggregate([ { $sort: { "status": 1, "amount": -1 } } ]);
Menghadkan keputusan kepada 3 pesanan teratas dengan jumlah tertinggi.
db.orders.aggregate([ { $sort: { "amount": -1 } }, { $limit: 3 } ]);
Melangkau 5 pesanan pertama dan mengembalikan selebihnya.
db.orders.aggregate([ { $skip: 5 } ]);
Sertai koleksi pesanan dengan koleksi Butiran pesanan untuk menambah butiran pesanan.
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" } } } ]);
Atas ialah kandungan terperinci Talian Paip Pengagregatan MongoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!