MongoDB 聚合查询

摘要:
FORMUsersWHERENDER=“男”SKIP100LIMIT20db。用户聚合([{$match:{$project:COUNT(NULL)ASEMP_QTYFROMUsersWHERENDER='female'GROUPBYDEPARTMENTHAVINGCOUNT(*)<{gender:{_id:emp_qty:{$sum:{$smatch:{$lt:
什么是 MongoDB 聚合框架
  • MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:
    • 作用在一个或几个集合上;
    • 对集合中的数据进行的一系列运算;
    • 将这些数据转化为期望的形式;
  • 从效果而言,聚合框架相当于 SQL 查询中的:
    • GROUP BY
    • LEFT OUTER JOIN
    • AS等
管道(Pipeline)和步骤(Stage)
  • 整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道:
    • 接受一系列文档(原始数据);
    • 每个步骤对这些文档进行一系列运算;
    • 结果文档输出给下一个步骤;

MongoDB 聚合查询第1张

聚合运算的基本格式
pipeline = [$statge1, $stage2, ...$stageN];

db.<COLLECTION>.aggregate(
	pipeline,
	{	options }
);
常见步骤
步骤作用SQL等价运算符
$match过滤WHERE
$project投影AS
$sort排序ORDER BY
$group分组GROUP BY
$skip/$limit结果限制SKIP/LIMIT
$lookup左外连接LEFT OUTER JOIN
常见步骤中的运算符
$match$project$group
$eq/$gt/$gte/$lt/$lte选择需要的或排除不需要的字段$sum/$avg
$and/$or/$not/$in$map/$reduce/$filter$push/$addToSet
$geoWithin/$intersect$range$first/$last/$max/$min
$multiply/$divide/$substract/$add
$year/$month/$dayOfMonth/$hour/$minute/$second
步骤作用SQL等价运算符
$unwind展开数组N/A
$graphLookup图搜索N/A
N/A
聚合运算的使用场景

聚合查询可以用于OLAP和OLTP场景。例如:

OLTPOLAP
计算分析一段时间内的销售总额、均值
计算一段时间内的净利润
分析购买人的年龄分布
分析学生成绩分布
统计员工绩效
MQL 常用步骤与 SQL 对比
SELECT 
	FIRST_NAME AS `名`,
	LAST_NAME AS `姓`,
FORM Users
WHERE GENDER = '男'
SKIP 100
LIMIT 20
db.users.aggregate([
	{$match: {gender: "男"}},
	{$skip: 100},
	{$limit: 20},
	{$project: {
		"名": $first_name,
		"姓": $last_name
	}}
]);
SELECT DEPARTMENT,
	COUNT(NULL) AS EMP_QTY 
FROM Users
WHERE GENDER = '女'
GROUP BY DEPARTMENT HAVING
COUNT(*) < 10
db.users.aggregate([
	{$match: {gender: '女'}},
	{$group: {
		_id: $DEPARTMENT,
		emp_qty: {$sum: 1}
	}},
	{$match: {$emp_qty: {$lt: 10}}}
]);
MQL 特有步骤 $unwind

$unwind指定字段进行子文档展开,其他字段不动

> db.students.findOne()
{
	name: "张三",
	score: [
		{subject: "语文", score: 84},
		{subject: "数学", score: 90},
		{subject: "外语", score: 69},
	]
}
> db.students.aggregate([$unwind: $score])
{name: "张三", score: {subject: "语文", score: 84}}
{name: "张三", score: {subject: "数学", score: 90}}
{name: "张三", score: {subject: "外语", score: 69}}
MQL 特有步骤 $bucket

$bucket指定字段按指定区间进行分组统计

MongoDB 聚合查询第2张

MQL 特有步骤 $facet

$facet指定多个字段分别$bucket分组统计
MongoDB 聚合查询第3张

免责声明:文章转载自《MongoDB 聚合查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Halcon学习笔记1location.hash 详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【ZT】SQL实现多字段模糊匹配关键字查询

我们开发数据库应用时,常常需要用到模糊查询。如果同一个条件需要匹配很多字段怎么办呢?通常,程序员会每个字段都在SQL中“field like'%cond%'”一次。这样,SQL语句会长得惊人,碰上复杂一点的,甚至SQL语句会因为超长而被数据库拒绝执行。其实,这个问题只要动动脑 筋就很容易解决:首先,将要匹配相同条件的字段连起来(field1+field2+...

看懂Oracle执行计划

—>  根据需要配置要显示在执行计划中的列       执行计划的常用列字段解释:       基数(Rows):Oracle估计的当前操作的返回结果集行数       字节(Bytes):执行该步骤后返回的字节数       耗费(COST)、CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好(该值可能与实际有...

C#位运算讲解与示例

今天在项目中遇到按位或组合权限串的问题: 首先每一个权限数都是2的N次方数 如:k1=2 ; //添加           k2=4 ; //删除           k3=8; //修改           ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了。 如:          purview = k2|k3; //...

cacti 流量图合并

cacti 安装:https://www.cnblogs.com/weijie0717/p/4072711.html 一、需求介绍   由于交换机的多端口跑同一种流量,需要汇总统计。因此需要见多个端口的流量图叠加汇总到一个流量图中展示。此实验以公网上联端口为例:T1/1/23 和 Te1/1/24. 二、环境   cacti版本:0.8.8f   系统:c...

转载:SQL注入演示demo

网上看到的一个SQL注入的演示demo,很完整所以转载过来,分享给大家。先要感谢作者!!   作者:潘良虎链接:http://www.zhihu.com/question/22953267/answer/80141632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Web安全简史在Web1.0时代,人们更多是关注服务器端...

一套完整自定义工作流的实现

概述: 本工作流以一套金融软件业务处理流程为例,实现功能包括:流程自定义、步骤自定义、步骤重复次数、步骤类型(顺序/并行)、定义排序功能,完全使用数据库实现,本文将详细分析业务流程、系统设计及实现细节。 术语: 工作流(Workflow)[1],是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻...