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

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


推荐阅读
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
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社区 版权所有