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个结果。
以上只是聚合操作的一种示例,实际使用中可以根据具体需求灵活组合聚合阶段来实现不同的数据处理任务。