MongoDB的聚合(Aggregate)是一種操作數據的方法,它可以對集合中的文檔進行分組、篩選、排序等操作,并返回處理后的結果。
聚合操作通常由多個階段(Stage)組成,每個階段都有不同的功能。以下是常用的一些聚合階段:
$match
:根據指定的條件篩選文檔,類似于查詢操作中的find
方法。
$group
:將文檔按照指定的字段進行分組,可以對每個分組應用聚合函數(如計數、求和、平均值等)。
$sort
:對文檔進行排序,可以指定排序字段以及排序方式(升序或降序)。
$project
:對文檔進行投影,即選擇需要返回的字段,可以使用表達式進行計算或重命名字段。
$limit
:限制返回結果的數量,只返回指定數量的文檔。
$skip
:跳過指定數量的文檔,返回剩下的文檔。
$unwind
:將包含數組的文檔拆分成多個文檔,每個文檔只包含數組中的一個元素。
$lookup
:在一個集合中查找與另一個集合相關聯的文檔,類似于關系型數據庫中的JOIN操作。
聚合操作可以使用聚合管道(Aggregation Pipeline)的方式進行多個階段的組合操作,每個階段的輸出都會作為下一個階段的輸入。可以根據需要組合不同的階段來實現復雜的數據處理需求。
以下是一個使用聚合操作的示例,假設有一個orders
集合,包含了訂單的信息:
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } },
{ $limit: 10 }
])
以上聚合操作的意思是篩選狀態為"completed"的訂單,按照客戶分組并計算每個客戶的總金額,然后按照總金額進行降序排序,最后只返回前10個結果。
以上只是聚合操作的一種示例,實際使用中可以根據具體需求靈活組合聚合階段來實現不同的數據處理任務。