在MongoDB中,可以使用聚合管道(aggregation pipeline)對集合中的數據進行數據統計。聚合管道是一系列的階段(stages),每個階段都會對數據進行某種操作。以下是一些常用的聚合管道階段,用于數據統計:
$match
:過濾數據,只保留滿足指定條件的文檔。$group
:根據指定的鍵值對文檔進行分組,并對每個分組執行聚合操作,如求和、計數、平均值等。$sort
:對數據進行排序。$project
:選擇或排除文檔中的字段,以及對字段進行計算和轉換。$limit
:限制輸出文檔的數量。$skip
:跳過指定數量的文檔。$unwind
:將數組字段拆分為多個文檔。$lookup
:在另一個集合中查找文檔,并將它們與當前文檔合并。以下是一個使用聚合管道進行數據統計的示例:
假設我們有一個名為orders
的集合,其中包含以下文檔:
[
{ "_id": 1, "customer_id": 1, "amount": 100 },
{ "_id": 2, "customer_id": 1, "amount": 200 },
{ "_id": 3, "customer_id": 2, "amount": 300 },
{ "_id": 4, "customer_id": 2, "amount": 400 },
{ "_id": 5, "customer_id": 3, "amount": 500 }
]
我們想要統計每個客戶的訂單總金額和訂單數量。可以使用以下聚合查詢:
db.orders.aggregate([
{
$group: {
_id: "$customer_id",
totalAmount: { $sum: "$amount" },
orderCount: { $sum: 1 }
}
},
{
$sort: { totalAmount: -1 }
}
])
這個查詢的輸出將是:
[
{ "_id": 3, "totalAmount": 500, "orderCount": 1 },
{ "_id": 2, "totalAmount": 700, "orderCount": 2 },
{ "_id": 1, "totalAmount": 300, "orderCount": 2 }
]
這個示例中,我們首先使用$group
階段按customer_id
對文檔進行分組,并計算每個分組的totalAmount
(訂單總金額)和orderCount
(訂單數量)。然后,我們使用$sort
階段按totalAmount
對結果進行降序排序。