MongoDB aggregate 运用篇
基础知识
操作符介绍:
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$limit:限制结果数量
$skip:忽略结果的数量
$sort:按照给定的字段排序结果
$group:按照给定表达式组合结果
$unwind:分割嵌入数组到自己顶层文件 $sum 总结从集合中的所有文件所定义的值.
$avg 从所有文档集合中所有给定值计算的平均.
$min 获取集合中的所有文件中的相应值最小.
$max 获取集合中的所有文件中的相应值的最大.
$push 值插入到一个数组生成文档中.
$addToSet 值插入到一个数组中所得到的文档,但不会创建重复.
$first 根据分组从源文档中获取的第一个文档。通常情况下,这才有意义,连同以前的一些应用 “$sort”-stage.
$last 根据分组从源文档中获取最后的文档。通常,这才有意义,连同以前的一些应用 “$sort”-stage.
文档:MongoDB 官方aggregate说明。
相关使用:
db.collection.aggregate([array]);
array可是是任何一个或多个操作符。
group和match的用法,使用过sqlserver,group的用法很好理解,根据指定列进行分组统计,可以统计分组的数量,也能统计分组中的和或者平均值等。
group之前的match,是对源数据进行查询,group之后的match是对group之后的数据进行筛选;
同理,sort,skip,limit也是同样的原理;
{_id:1,name:"a",status:1,num:1}
{_id:2,name:"a",status:0,num:2}
{_id:3,name:"b",status:1,num:3}
{_id:4,name:"c",status:1,num:4}
{_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 运用篇的更多相关文章
- MongoDB aggregate 运用篇 个人总结
最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得.. 别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一 ...
- MongoDB aggregate 运用篇(转)
http://www.cnblogs.com/qq78292959/p/4440679.html 最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregat ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
- MongoDB【第二篇】集群搭建
第一步:准备 1.安装包 mongodb-linux-x86_64-rhel70-3.4.2.tgz 2. 架构: 本文为 1-primary.1-secondary.1-arbiter 的 mong ...
- MongoDB【第二篇】MongoDB逻辑与物理存储结构
基本的操作 一.常用的命令和基础知识 1.进入MongoDB sehll 首先我们进入到MongoDB所在目录执行 cd /work/app/mongodb/bin/ #启动 ./mongo 为了方便 ...
- MongoDB Aggregate Methods(2) MonoDB 的 3 种聚合函数
aggregate(pipeline,options) 指定 group 的 keys, 通过操作符 $push/$addToSet/$sum 等实现简单的 reduce, 不支持函数/自定义变量 g ...
- 【mongoDB运维篇④】Shard 分片集群
简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...
- MongoDB基础一篇就够了
MongoDB linux安装MongoDB Windows安装MongoDB 查看当前数据库名称 db 查看所有数据库名称 列出所有在物理上存在的数据库 show dbs 切换数据库 如果数据库不存 ...
- nodejs笔记--与MongoDB的交互篇(七)
原文地址:http://www.cnblogs.com/zhongweiv/p/node_mongodb.html 目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门( ...
随机推荐
- ProgressBar---进度条
最近在处理标题进度条时,耗费了一些时间,现在总结一下ProgressBar的相关知识,有不对的地方请大神们批评指正! 进度条主要有以下三种: 1.对话框进度条 2.标题进度条 注意:requestWi ...
- DevExpress 标题栏添加搜索功能
上图是效果图 附件示例代码下载
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- $_session (应用)
登录: 封装类(用于连接数据库)代码中创建一个对象最好可以重复使用 <?php class DBDA { public $host="localhost"; public $ ...
- Java笔记:Number
序号 方法与描述 1 xxxValue()将number对象转换为xxx数据类型的值并返回. 2 compareTo()将number对象与参数比较. 3 equals()判断number对象是否与参 ...
- html5 Application Cache 机制以及使用
那什么是Application Cache呢? 顾名思义,AppCache就是对app内存缓存的方案,具体表现为当请求某个文件时不是从网络获取该文件,而是从本地内存中获取. Application C ...
- WPF 动画显示控件
当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnimation(object co ...
- rdlc报表相关
错误提示:1.尚未指定报表定义的来源 注意ReportPath与ReportEmbeddedResource的区别,前者获取或设置本地报表的本地文件系统路径,设置此属性将导致后者属性值被忽略:后者将获 ...
- 网站添加第三方登陆(PHP版)
这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,W ...
- python import cv2 出错:cv2.x86_64-linux-gnu.so: undefined symbol
之前写过一个python使用opencv处理图片的脚本,当时是可以使用的,现在突然发现执行时出错: ImportError: /usr/lib/python2.7/dist-packages/cv2. ...