http://www.cnblogs.com/qq78292959/p/4440679.html

  • 最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得。。

    别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一下我的总结。

    基础知识

    请大家自行查找更多,以下是关键文档。

    操作符介绍:

    $project:包含、排除、重命名和显示字段

    $match:查询,需要同find()一样的参数

    $limit:限制结果数量

    $skip:忽略结果的数量

    $sort:按照给定的字段排序结果

    $group:按照给定表达式组合结果

    $unwind:分割嵌入数组到自己顶层文件

    文档:MongoDB 官方aggregate说明。

    相关使用:

    db.collection.aggregate([array]);

    array可是是任何一个或多个操作符。

    group和match的用法,使用过sqlserver,group的用法很好理解,根据指定列进行分组统计,可以统计分组的数量,也能统计分组中的和或者平均值等。

    group之前的match,是对源数据进行查询,group之后的match是对group之后的数据进行筛选;

    同理,sort,skip,limit也是同样的原理;

    1.1 {_id:1,name:"a",status:1,num:1}
    2.2 {_id:2,name:"a",status:0,num:2}
    3.3 {_id:3,name:"b",status:1,num:3}
    4.4 {_id:4,name:"c",status:1,num:4}
    5.5 {_id:5,name:"d",status:1,num:5}

    以下是示例:

    应用一:统计name的数量和总数;

    db.collection.aggregate([

      {$group:{_id:"$name",count:{$sum:1},total:{$sum:"$num"}}

    ]);

    应用二:统计status=1的name的数量;

    db.collection.aggregate([

      {$match:{status:1}},

      {$group:{_id:"$name",count:{$sum:1}}}

    ]);

    应用三:统计name的数量,并且数量为小于2的;

    db.collection.aggregate([

      {$group:{_id:"$name",count:{$sum:1}},

      {$match:{count:{$lt:2}}}

    ]);

    应用四:统计stauts=1的name的数量,并且数量为1的;

    db.collection.aggregate([

      {$match:{status:1}},

      {$group:{_id:"$name",count:{$sum:1}}},

      {$match:{count:1}}

    ]);

    多列group,根据name和status进行多列

    db.collection.aggregate([

      {$group:{_id:{name:"$name",st:"$status"},count:{$sum:1}}}

    ]);

    $project该操作符很简单,

    db.collection.aggregate([

      {$project:{name:1,status:1}}

    ]);

    结果是,只有_id,name,status三个字段的表数据,相当于sql表达式 select _id,name,status from collection

    $unwind

    这个操作符可以将一个数组的文档拆分为多条文档,在特殊条件下有用,本人暂没有进行过多的研究。

    以上基本就可以实现大部分统计了,group前条件,group后条件,是重点。

 
 

MongoDB aggregate 运用篇(转)的更多相关文章

  1. MongoDB aggregate 运用篇

    基础知识 操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的 ...

  2. MongoDB aggregate 运用篇 个人总结

    最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得.. 别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一 ...

  3. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  4. MongoDB【第二篇】集群搭建

    第一步:准备 1.安装包 mongodb-linux-x86_64-rhel70-3.4.2.tgz 2. 架构: 本文为 1-primary.1-secondary.1-arbiter 的 mong ...

  5. MongoDB【第二篇】MongoDB逻辑与物理存储结构

    基本的操作 一.常用的命令和基础知识 1.进入MongoDB sehll 首先我们进入到MongoDB所在目录执行 cd /work/app/mongodb/bin/ #启动 ./mongo 为了方便 ...

  6. MongoDB Aggregate Methods(2) MonoDB 的 3 种聚合函数

    aggregate(pipeline,options) 指定 group 的 keys, 通过操作符 $push/$addToSet/$sum 等实现简单的 reduce, 不支持函数/自定义变量 g ...

  7. 【mongoDB运维篇④】Shard 分片集群

    简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...

  8. MongoDB基础一篇就够了

    MongoDB linux安装MongoDB Windows安装MongoDB 查看当前数据库名称 db 查看所有数据库名称 列出所有在物理上存在的数据库 show dbs 切换数据库 如果数据库不存 ...

  9. nodejs笔记--与MongoDB的交互篇(七)

    原文地址:http://www.cnblogs.com/zhongweiv/p/node_mongodb.html 目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门( ...

随机推荐

  1. mysql 清空数据

    清空数据有2 个命令 -- 清空全部数据,不写日志,不可恢复,速度极快 truncate table 表名; -- 清空全部数据,写日志,数据可恢复,速度慢 delete from 表名 业务需求:清 ...

  2. laravel 处理自定错误页面,如404,500,501,502,503,504等等

    laravel 5.0 版本下,修改pp/Exceptions/Handler.phppublic function render($request, Exception $e) { if ($e i ...

  3. pixi.js v5 快速了解

    pixi.js 追求简单,  性能,高价值. pixi.js v5将是一交比较大的升级,代码更加精简,性能更加强悍,功能更加丰富,扩展更加高效 pixi.js一步一脚印,版本持续稳定的更新, 深入学习 ...

  4. 扩展名为DBF的是什么文件啊?

    扩展名为DBF的文件: .dbf文件是dBase和FoxPro所使用的数据库格式,在没有这两种软件的情况下,可以使用Excel打开文件.在Excel的“打开”文件的对话框中,选择文件类型为“dBase ...

  5. Java之Map的使用场景

    总结之 Map接口 的使用场景(day04) Map: Map中的集合,元素是成对存在的(理解为夫妻).每个元素由键与值两部分组成,通过键可以找对所对应的值 Map中的集合不能包含重复的键,值可以重复 ...

  6. 【刷题】LOJ 6121 「网络流 24 题」孤岛营救问题

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  7. 开发常用镜像资源替换为国内开源镜像(yum,compose,maven,docker,android sdk,npm,国内开源镜像汇总)

    一.国内开源镜像站点汇总 阿里云开源镜像站 (http://mirrors.aliyun.com/)网易开源镜像站 (http://mirrors.163.com/)中国科学技术大学开源镜像站 (ht ...

  8. java基础知识学习--------之枚举类型(1)

    枚举类型的概念: /** * 目的:枚举类型 * @author chenyanlong * 日期:2017/10/22 * 网址:http://blog.csdn.net/sup_heaven/ar ...

  9. 安装hadoop1.2.1(参考hadoop实战第二版)

    准备: 安装jdk和ssh. 1. 官网下载hadoop1.2.1 hadoop-1.2.1.tar.gz http://hadoop.apache.org/releases.html 2. 解压到/ ...

  10. Object和泛型

    这俩东东呢实现的效果是一样的,但是它们俩的效率不一样,原理也不一样.直接说结论吧,泛型比Object好用,效率高.因为Object有一个装箱和拆箱的过程,倘若是很多的数据那效率就低到不行了,而泛型没有 ...