热门标签 | 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()后加点使用

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


推荐阅读
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 本章探讨了使用固定数组实现栈和队列的基本方法,以及如何通过这些基本结构来实现更复杂的操作,如获取栈中的最小值。此外,还介绍了如何利用栈来模拟队列的行为,反之亦然。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • LeetCode: 实现队列与栈的高级应用
    本文介绍如何使用队列和栈实现特定功能,包括动态维护队列元素并计算其平均值,以及栈操作中的优化技巧。 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 本篇文章介绍如何将两个分别表示整数的链表进行相加,并生成一个新的链表。每个链表节点包含0到9的数值,如9-3-7和6-3相加得到1-0-0-0。通过反向处理链表、逐位相加并处理进位,最终再将结果链表反向,即可完成计算。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • BFS深搜hashtable来判断是横线还是竖线但是为啥还是90分啊呜呜!找不到原因#define_CRT_SECURE_NO_WARNINGS1#include ... [详细]
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社区 版权所有