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