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

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


咨詢
建站咨詢
