新聞中心
《MongoDB Aggregate管道:從入門(mén)到實(shí)戰(zhàn)》

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的清澗網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
MongoDB Aggregate簡(jiǎn)介
MongoDB Aggregate管道是一個(gè)基于數(shù)據(jù)處理流水線的框架,它允許用戶對(duì)集合中的數(shù)據(jù)進(jìn)行分組、轉(zhuǎn)換和計(jì)算等操作,Aggregate管道提供了一個(gè)類似于SQL中GROUP BY和JOIN的功能,可以幫助我們解決復(fù)雜的數(shù)據(jù)處理問(wèn)題。
Aggregate管道的主要階段
1、$match:篩選符合條件的文檔。
2、$group:將集合中的文檔分組,可用于計(jì)算總和、平均數(shù)、最大值、最小值等。
3、$sort:對(duì)輸入的文檔進(jìn)行排序。
4、$project:選擇、添加或刪除文檔的字段。
5、$lookup:執(zhí)行左外連接,以另一個(gè)集合作為右表,類似于SQL中的JOIN。
6、$unwind:將數(shù)組字段中的每個(gè)元素拆分為單獨(dú)的文檔。
7、$limit:限制聚合管道返回的文檔數(shù)。
8、$skip:在聚合管道中跳過(guò)指定數(shù)量的文檔。
9、$out:將聚合管道的結(jié)果輸出到指定的集合。
入門(mén)示例
1、$match示例
假設(shè)有一個(gè)名為“orders”的集合,包含以下文檔:
{
"_id": 1,
"status": "A",
"amount": 100
}
{
"_id": 2,
"status": "A",
"amount": 200
}
{
"_id": 3,
"status": "D",
"amount": 300
}
使用$match階段篩選出狀態(tài)為“A”的訂單:
db.orders.aggregate([
{ $match: { status: "A" } }
])
2、$group示例
計(jì)算狀態(tài)為“A”的訂單的總金額:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: null, totalAmount: { $sum: "$amount" } } }
])
3、$sort示例
將訂單按照金額升序排序:
db.orders.aggregate([
{ $sort: { amount: 1 } }
])
4、$project示例
選擇訂單的_id、status和amount字段,同時(shí)計(jì)算每個(gè)訂單的稅額(假設(shè)稅率為10%):
db.orders.aggregate([
{ $project: { _id: 1, status: 1, amount: 1, tax: { $multiply: ["$amount", 0.1] } } }
])
5、$lookup示例
假設(shè)有一個(gè)名為“customers”的集合,包含以下文檔:
{
"_id": 1,
"name": "Alice",
"orderno": "A123"
}
{
"_id": 2,
"name": "Bob",
"orderno": "B123"
}
現(xiàn)在我們希望將“orders”集合中的訂單與“customers”集合中的客戶信息進(jìn)行關(guān)聯(lián):
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "orderno",
foreignField: "orderno",
as: "customer"
}
}
])
6、$unwind示例
假設(shè)有一個(gè)名為“inventory”的集合,包含以下文檔:
{
"_id": 1,
"sku": "abc123",
"sizes": ["S", "M", "L"]
}
使用$unwind將sizes數(shù)組中的每個(gè)元素拆分為單獨(dú)的文檔:
db.inventory.aggregate([
{ $unwind: "$sizes" }
])
實(shí)戰(zhàn)示例
假設(shè)我們有一個(gè)電商平臺(tái)的訂單數(shù)據(jù),我們需要計(jì)算每個(gè)客戶的總消費(fèi)金額。
1、創(chuàng)建訂單集合“orders”:
{
"_id": 1,
"customer_id": 1,
"amount": 100
}
{
"_id": 2,
"customer_id": 2,
"amount": 200
}
{
"_id": 3,
"customer_id": 1,
"amount": 300
}
2、使用Aggregate管道計(jì)算每個(gè)客戶的總消費(fèi)金額:
db.orders.aggregate([
{ $group: { _id: "$customer_id", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } }
])
3、輸出結(jié)果:
{ "_id": 1, "totalAmount": 400 }
{ "_id": 2, "totalAmount": 200 }
通過(guò)以上示例,我們可以看到MongoDB Aggregate管道在處理復(fù)雜的數(shù)據(jù)聚合問(wèn)題時(shí)非常靈活和強(qiáng)大,掌握Aggregate管道,可以幫助我們更高效地處理數(shù)據(jù),滿足各種業(yè)務(wù)需求。
分享文章:mongodb中非常好用的Aggregate入門(mén)教程
瀏覽路徑:http://m.fisionsoft.com.cn/article/dhoggos.html


咨詢
建站咨詢
