Mongo聚合查询

标签: mongo  

MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:

1)作用在一个或者几个集合上;

2)对集合中的数据进行一系列的运算;

3)将这些数据转化为期望的形式;

从效果而言,聚合框架相当于 SQL 查询中的:

1)GROUP BY

2)LEFT OUTER JOIN

3)AS等

管道(Pipeline)和步骤(Stage)

整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的, 每个管道:

  • 接受一系列文档(原始数据);
  • 每个步骤对这些文档进行一系列运算;
  • 结果文档输出给下一个步骤;

聚合运算的基本格式

pipeline = [$stage1, $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
$unwind 展开数组 N/A
$graphLookup 图搜索 N/A
$facet/$bucket 分面搜索 N/A

常见步骤中的运算符

$match $project $group
•$eq/$gt/$gte/$lt/$lte •$and/$or/$not/$in •$geoWithin/$intersect •…… •选择需要的或排除不需要的字段 •$map/$reduce/$filter •$range •$multiply/$divide/$substract/$add •$year/$month/$dayOfMonth/$hour/$minute/$second •…… •$sum/$avg •$push/$addToSet •$first/$last/$max/$min •……

MQL 常用步骤与 SQL 对比

示例1:

SELECT
FIRST_NAME AS `名`, LAST_NAME AS `姓`
FROM Users
WHERE GENDER = '男'
SKIP 100 LIMIT 20

VS:

db.users.aggregate([
	{$match: {gender: ’’男”}},
	{$skip: 100}, 
	{$limit: 20}, 
	{$project: {
    	'名': '$first_name', '姓': '$last_name'
   }} 
]);

示例2:

SELECT DEPARTMENT, COUNT(NULL) AS EMP_QTY
FROM Users
WHERE GENDER = '女'
GROUP BY DEPARTMENT HAVING COUNT(*) < 10

VS:

db.users.aggregate([
	{$match: {gender: '女'}},
	{$group: {
			_id: '$DEPARTMENT’, 
			emp_qty: {$sum: 1}
	}},
	{$match: {emp_qty: {$lt: 10}}}
]);

工具

可以使用Mongo Compass或者Studio 3T等工具帮助完成复杂的聚合查询,而且可以导出成不同编程语言的代码。

「真诚赞赏,手留余香」

请我喝杯咖啡?

使用微信扫描二维码完成支付

相关文章