MongoDB 聚合
MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
aggregate() 方法
MongoDB中聚合的方法使用aggregate()。
语法
aggregate() 方法的基本语法格式如下所示:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
实例
test集合中的数据如下:
/* 1 */ { "_id" : ObjectId("63e36e36da0f660d6928a751"), "id" : 200.0, "name" : "zhang", "age" : 32.0 } /* 2 */ { "_id" : ObjectId("63e36e36da0f660d6928a752"), "id" : 22.0, "name" : "wang", "age" : 18.0 } /* 3 */ { "_id" : ObjectId("63e36ea0da0f660d6928a753"), "id" : 300.0, "name" : "zeng", "age" : 28.0 } /* 4 */ { "_id" : ObjectId("63e37016da0f660d6928a754"), "id" : 888.0, "name" : "zeng", "age" : 20.0 }
现在计算以上集合的年龄平均值,使用aggregate()计算结果如下:
db.test.aggregate([{$group : {_id : "$name", age : {$avg : "$age"}}}])
以上实例类似sql语句:
select name,AVG(age) from test group by name
在上面的例子中,我们通过字段name字段对数据进行分组,并计算 age的平均值。
下表列出一些聚合的表达式:
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.test.aggregate([{$group : {_id : "$name", age: {$sum : "$age"}}}]) |
$avg | 计算平均值 | db.test.aggregate([{$group : {_id : "$name", age: {$avg : "$age"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.test.aggregate([{$group : {_id : "$name", age: {$min : "$age"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.test.aggregate([{$group : {_id : "$name", age: {$max : "$age"}}}]) |
$push | 将值加入一个数组中,不会判断是否有重复的值。 | db.test.aggregate([{$group : {_id : "$name", age: {$push: "$age"}}}]) |
$addToSet | 将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。 | db.test.aggregate([{$group : {_id : "$name", age: {$addToSet : "$age"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.test.aggregate([{$group : {_id : "$name", first_age : {$first : "$age"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.test.aggregate([{$group : {_id : "$name", last_age : {$last : "$age"}}}]) |