在MongoDB中,你可以使用聚合管道(aggregation pipeline)來進(jìn)行復(fù)雜的數(shù)據(jù)處理和聚合操作。聚合管道是一系列的階段(stages),每個(gè)階段都會(huì)對(duì)輸入的數(shù)據(jù)進(jìn)行某種操作,然后將結(jié)果傳遞給下一個(gè)階段。
以下是一些常見的聚合管道階段:
$match
:過濾數(shù)據(jù),只輸出符合條件的文檔。$group
:根據(jù)指定的鍵值對(duì)文檔進(jìn)行分組,并對(duì)每個(gè)組執(zhí)行聚合操作(如求和、平均、最大、最小等)。$sort
:對(duì)數(shù)據(jù)進(jìn)行排序。$project
:選擇需要的字段,排除不需要的字段。$unwind
:將數(shù)組字段拆分成多個(gè)文檔。$lookup
:從另一個(gè)集合中拉取文檔,并將它們添加到當(dāng)前的文檔中。$limit
:限制輸出的文檔數(shù)量。$skip
:跳過指定數(shù)量的文檔。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用聚合管道對(duì)一個(gè)名為orders
的集合進(jìn)行數(shù)據(jù)聚合:
db.orders.aggregate([
{ $match: { status: "A" } }, // 過濾狀態(tài)為"A"的訂單
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }, // 按客戶ID分組,并計(jì)算每個(gè)客戶的訂單總金額
{ $sort: { total: -1 } } // 按訂單總金額降序排序
])
這個(gè)示例中,$match
階段過濾出狀態(tài)為"A"的訂單,$group
階段按客戶ID分組并計(jì)算每個(gè)客戶的訂單總金額,$sort
階段按訂單總金額降序排序。最終的結(jié)果將是一個(gè)包含每個(gè)客戶ID和其對(duì)應(yīng)訂單總金額的列表。