聚合(Aggregation)为集合文档数据提供各种处理数据方法,并返回计算结果。
MongoDB提供了3种方式来执行聚合命令:
- 聚合管道方法
- map-reduce方法
- 单一目标聚合方法
1. 聚合管道方法
聚合管道方法又可以直接理解为合计流水线法,就是把集合里若干含数值型的文档记录,其键对应的值进行各种分类统计。该方法支持分片集合操作。
db.collection_name.aggregate([{$match:{<field>}}, {$group:{<field1>, <field2>}} ]
)
聚合分类统计
按goodsid分类统计amount字段的总数量&#xff1a;
注意&#xff1a;
_id:"$goodsid", goodsid为分类字段名&#xff0c;_id为必须指定唯一性字段&#xff0c;不能改为其它名称的字段&#xff1b;
total为统计结果字段名&#xff0c;可以是任意的符合起名规则的新名称。
$sum为求和操作符号
$amount为求和字段&#xff0c;必须加上双引号
map-reduce方法
db.collection_name.mapreduce(function(){emit(<this.field1>, <this.field2>)},function(key,values){return array.sum(values)},{query:{<field>}, out:<resultname">}
)说明&#xff1a;
function(){emit(<this.field1>, <this.field2>)},把集合对应的字段<field1><field2>进行map操作function(key,values){return array.sum(values)},对map过来的field1&#xff0c;field2进行reduce操作&#xff0c;求得sum值把field1值和求得值连同out:<"resultname">一起返回query:{<field>}在集合里查询符合<field>条件的文档。注意&#xff1a;该方式进行聚合运算&#xff0c;效率铰聚合管道方式要低&#xff0c;而且使用更复杂。
单一目标聚合方法
该方法下&#xff0c;目前有两种聚合操作功能&#xff1a;
- db.collection_name.count()
- db.collection_name.distinct()
1. 统计文档数量&#xff1a;
db.collection_name.count(query, options)说明&#xff1a;统计集合里符合查询条件的文档数量&#xff0c;query为查询条件&#xff0c;option参数如下表
名称 | 类型 | 说明 |
---|
limit | integer | 限制要计数的文档的最大数量 |
skip | integer | 计数前要跳过的文档数 |
hint | string或document | 对需要查询的索引进行提示或详细说明 |
maxTimeMS | integer | 设置允许查询运行的最长时间 |
readConcern | string | 指定读取关注。默认级别为"local" 指定"majority"级别时&#xff0c;受以下3个条件限制&#xff1a; 1. 必须先启动MongoDB实例 2. 多用于副本集数据库的读关注 3. 使用该级别时&#xff0c;必须指定非空的查询条件 |
统计符合条件的记录数&#xff1a;
从第二条开始统计符合条件的记录数&#xff1a;
2. 统计集合里指定键的不同值&#xff1a;
db.collection_name.distinc(<key>,query,option
)说明&#xff1a;统计集合里指定键的不同值&#xff0c;并返回结果。
<key>只能指定一个键名&#xff0c;query为集合查找条件&#xff0c;option只提供collations选项
统计指定键的不同值并返回&#xff1a;
另外&#xff1a;单一目标聚合方法&#xff0c;可以直接在find()后加点使用