MongoDB——聚合操作详解

聚合(Aggregation)为集合文档数据提供各种处理数据方法,并返回计算结果。

MongoDB提供了3种方式来执行聚合命令:

  • 聚合管道方法
  • map-reduce方法
  • 单一目标聚合方法
1. 聚合管道方法

聚合管道方法又可以直接理解为合计流水线法,就是把集合里若干含数值型的文档记录,其键对应的值进行各种分类统计。该方法支持分片集合操作。

db.collection_name.aggregate(
	[
		{$match:{<field>}}, //统计查找条件
		{$group:{<field1>, <field2>}} //field1为分类字段;field2为含各种统计操作符的数值型字段,如$sum、$avg、$min、$max、$push、$addToSet、$first、$last操作符
	]
)
//aggregate命令作用类似SQL语言里的group by语句的使用方法
聚合分类统计

在这里插入图片描述

按goodsid分类统计amount字段的总数量:
在这里插入图片描述

注意:
_id:"$goodsid", goodsid为分类字段名,_id为必须指定唯一性字段,不能改为其它名称的字段;
total为统计结果字段名,可以是任意的符合起名规则的新名称。
$sum为求和操作符号
$amount为求和字段,必须加上双引号
map-reduce方法
db.collection_name.mapreduce(
	function(){emit(<this.field1>, <this.field2>)},
	function(key,values){return array.sum(values)},
	{query:{<field>}, out:<resultname">}
)

说明:
function(){emit(<this.field1>, <this.field2>)},把集合对应的字段<field1><field2>进行map操作

function(key,values){return array.sum(values)},对map过来的field1,field2进行reduce操作,求得sum值

把field1值和求得值连同out:<"resultname">一起返回

query:{<field>}在集合里查询符合<field>条件的文档。

注意:该方式进行聚合运算,效率铰聚合管道方式要低,而且使用更复杂。

在这里插入图片描述

单一目标聚合方法

该方法下,目前有两种聚合操作功能:

  • db.collection_name.count()
  • db.collection_name.distinct()

1. 统计文档数量:

db.collection_name.count(query, options)

说明:统计集合里符合查询条件的文档数量,query为查询条件,option参数如下表
名称类型说明
limitinteger限制要计数的文档的最大数量
skipinteger计数前要跳过的文档数
hintstring或document对需要查询的索引进行提示或详细说明
maxTimeMSinteger设置允许查询运行的最长时间
readConcernstring指定读取关注。默认级别为"local"
指定"majority"级别时,受以下3个条件限制:
1. 必须先启动MongoDB实例
2. 多用于副本集数据库的读关注
3. 使用该级别时,必须指定非空的查询条件

统计符合条件的记录数:

在这里插入图片描述

从第二条开始统计符合条件的记录数:
在这里插入图片描述

2. 统计集合里指定键的不同值:


db.collection_name.distinc(
	<key>,
	query,
	option
)

说明:统计集合里指定键的不同值,并返回结果。
<key>只能指定一个键名,query为集合查找条件,option只提供collations选项

统计指定键的不同值并返回:

在这里插入图片描述

另外:单一目标聚合方法,可以直接在find()后加点使用

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值