在之前的两篇文章 Mongodb中数据聚合之基本聚合函数count、distinct、group 和 Mongodb中数据聚合之MapReduce 中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式——聚合管道aggregate。 面对

在之前的两篇文章和中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式——聚合管道aggregate。

面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(aggregation framework),它是数据聚合的新框架,这个概念类似于数据处理中的管道。每个文档通过一个由多个节点组成的管道,每个节点都有自己的特殊的作用(分组、过滤等),文档经过由多个节点组成的管道后最终得到输出结果。管道基本的功能有两种:(1)对文档进行过滤,筛选出符合条件的文档;(2)对文档进行变换,改变文档的输出结构。

聚合管道的使用方式:db.collection.aggregate();

对于管道中的多个节点可以使用以下几种管道操作符,下面对各种管道操作符的功能进行描述:

$project:修改文档的结构(重命名、增加或删除域),也可以用于创建计算结果以及嵌套文档。

$match:过滤数据,只输出符合条件的文档。

$limit:限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档。

$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group:将集合中的文档分组,可用于统计结果。

$sort:文档排序输出。

$geoNear:输出接近某一地理位置的有序文档。

举两个简单的例子:

db.article.aggregate(

{ $project : {

title : 1 ,

author : 1 ,

}}

);

db.articles.aggregate( [

{ $match : { score : { $gt : 70, $lte : 90 } } },

{ $group: { _id: user, count: { $sum: 1 } } }

] );

下面对聚合管道使用过程中需要注意的地方进行说明:

(1)管道的是具有先后顺序的。

(2)$group操作目前是在内存中处理的,因此,不能对大量的文档进行使用该种方式进行分组操作;

(3)使用$unwind对数组中的字段值进行拆分时需要注意不能忘记写$符号,如{$unwind:"$tags"},tags字段前面有个$号;

(4)MongoDB 24.对内存做了优化,如果$sort出现在$limit之前,$sort只会对前$limit个文档进行操作,在内存中也只会保留前$limit个文档,节省了内存

(5)$sort操作是在内存中进行的,如果其占有的内存超过物理内存的10%,程序会产生错误

(6)管道的输出结果大小不能大于16M,超过会出现错误。

(7)如果一个管道操作符在执行过程中所占用的内存超过系统内存容量的10%,则会报错;

(8)聚合管道可以提供很好的性能和一致的接口,使用起来比较简单,对于一些简单的固定的聚集操作可以使用管道,但是对于一些复杂的、大量数据集的聚合任务还是使用MapReduce。

至此,关于Mongodb数据库内的数据聚合操作的简单描述便结束了,如果大家想更深入的学习了解,我觉得官网才是最好的教材,

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mongo PHP aggregate,Mongodb中数据聚合之聚合管道aggregate相关推荐

  1. java mongo hint_聊一聊mongodb中的 explain 和 hint

    原标题:聊一聊mongodb中的 explain 和 hint 看到explain和hint的时候,第一个想到的就是mysql,确实,这就是在mysql中借鉴过来的,既然是借鉴过来的,我想大家都知道这 ...

  2. mongoDB中聚合(aggregate)的具体使用

    mongoDB中聚合(aggregate)的具体使用 - 简书 最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用 先来看一个分组的例子,本例中$group是一个管道操作符 ...

  3. 【MongoDB】——数据存储结构与基本数据类型

    MongoDB数据存储结构 1.基本概念 在MongoDB中数据存储的基本概念是数据库.集合.文档. 文档(document)是MongoDB中数据的基本存储单元,非常类似与关系型数据库管理系统中的行 ...

  4. 使用aggregate在MongoDB中查找重复的数据记录

    我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...

  5. mongo备份索引_【MongoDB学习之四】索引 聚合 备份与恢复 监控

    环境 MongoDB 4.0 CentOS 6.5_x64 一.索引 语法 ensureIndex()方法基本语法格式如下所示: >db.COLLECTION_NAME.ensureIndex( ...

  6. MongoDB中的聚合管道($lookup多表关联查询、$unwind、$match、$project)

    MongoDB中的聚合管道($lookup多表关联查询.$unwind.$match.$project) 管道的概念 聚合框架 $lookup的功能及语法 主要功能 基本语法 例子 说明 $unwin ...

  7. mongodb 日期分组聚合_mongoose聚合aggregate按日期分组计算

    简介 在MongoDB中,聚合(aggregate)主要用于进行处理数据,比如统计求和,求平均数等,并返回计算后的数据结果,这给我们带来了很多便捷之处,因为可以在读取数据的同时进行数据处理. 场景介绍 ...

  8. mongoDB中的聚合操作

    本文来说下mongoDB中的聚合操作 文章目录 概述 概述 MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似 SQL 语句中的 ...

  9. MongoDB(6)数据聚合 amp;amp; 管道操作

    MongoDB 入门专栏 http://blog.csdn.net/column/details/19681.html 管道操作 mongodb 的数据聚合过程通常会配合管道操作,mongodb 的管 ...

最新文章

  1. 资源|深度学习注意力机制TensorFlow 使用教程
  2. 对接第三方平台JAVA接口问题推送和解决
  3. MPLS由何而来?—Vecloud微云
  4. 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念
  5. Vue.js 组件基础
  6. ubuntu16 php mysql_Ubuntu16.04 搭建 LAMP(Ubuntu16.04 、apache 2.4.18、MySQL 5.7.22、PHP 7.0.28)...
  7. JPA中实现双向多对多的关联关系(附代码下载)
  8. php中get和set区别,javascript中set与get方法详解
  9. RTMPdump(libRTMP) 源代码分析 7: 建立一个流媒体连接 (NetStream部分 2)
  10. 我所遭遇过的中间件--VTK
  11. Spring MVC学习总结(20)——SpringMVC传参总结
  12. 【Linux】shell命令总结
  13. Collectors.counting()
  14. python基于Suprise模块构建推荐算法模型,实现电影、书籍等资源的推荐
  15. mac使用jeb记录
  16. C++ 类成员函数的函数指针
  17. python五子棋双人对弈_用python实现双人五子棋(终端版)
  18. 精选黑科技资源站点,总会有你需要的干货!
  19. 计算机word中如何加入水印?
  20. 爱情智慧:当他人生气时,如何聆听

热门文章

  1. 【CNN】平移不变形
  2. 【电子学会】2020年09月图形化四级 -- 创意画图
  3. 安全狗揽获2021首届WAF攻防大师赛TOP5佳绩
  4. mt管理器修改迷你世界服务器,用支付宝支付的游戏,怎么改代码,游戏迷你世界...
  5. 加密机技术,加解密技术,证书,加密算法
  6. IOS学习——ARC初识
  7. 【优化求解】基于多元宇宙MVO算法求解最优目标matlab源码
  8. 流形学习——Isomap算法
  9. Java初识相关问题
  10. 浅析我国第三方支付平台