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参数如下表
名称 类型 说明
limit integer 限制要计数的文档的最大数量
skip integer 计数前要跳过的文档数
hint string或document 对需要查询的索引进行提示或详细说明
maxTimeMS integer 设置允许查询运行的最长时间
readConcern string 指定读取关注。默认级别为"local"
指定"majority"级别时,受以下3个条件限制:
1. 必须先启动MongoDB实例
2. 多用于副本集数据库的读关注
3. 使用该级别时,必须指定非空的查询条件

统计符合条件的记录数:

在这里插入图片描述

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

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


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

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

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

在这里插入图片描述

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

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

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/121447382
今日推荐