热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB——聚合操作详解

聚合(Aggregation)为集合文档数据提供各种处理数据方法,并返回计算结果。MongoDB提供了3种方式来执行聚合命令࿱

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

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

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

1. 聚合管道方法

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

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

聚合分类统计

在这里插入图片描述

按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参数如下表

名称类型说明
limitinteger限制要计数的文档的最大数量
skipinteger计数前要跳过的文档数
hintstring或document对需要查询的索引进行提示或详细说明
maxTimeMSinteger设置允许查询运行的最长时间
readConcernstring指定读取关注。默认级别为"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()后加点使用

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


推荐阅读
author-avatar
手机用户2502907453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有