logo头像

aferica

mongoDB中聚合aggregate使用

本文于1714天之前发表,文中内容可能已经过时。

Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY。聚合工具可以让开发人员直接使用MongoDB原生的命令操作数据库中的数据,并且按照要求进行聚合。

Aggregation管道

管道聚合会将上一个命令输出的数据作为下一个命令的参
因此相同条件,不同顺序排列,结果也会不同
MongoDB中的管道聚合非常实用,提供高效的数据聚合,并且是MongoDB中数据聚合的首选方法

示例图:
20190429141421.png

常用操作

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

示例:

1
2
3
4
5
6
7
8
db.xxx.aggregate(
{ $project : {
// 默认情况下_id字段是被包含的,如果要想不包含_id话可以通过下面方式:
_id: 0,
title : 1 ,
author : 1 ,
}}
);

$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

示例:

1
2
3
4
5
6
7
8
9
10
db.xxx.aggregate(
{
$match : {
publish_date: {
$lte: 'xxxx',
$gt: 'xxxx'
}
}
}
);

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

示例:

1
2
3
db.xxx.aggregate(
{ $limit : 10}
);

$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

示例:

1
2
3
db.xxx.aggregate(
{ $skip : 20}
);

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

该方法主要使用场景,统计数组类型字段中每一个类型数量,如:标签数据、演员数据
示例:

1
2
3
db.xxx.aggregate(
{ $unwind : '$tags'} // tags是字段名 前必须添加$符
);

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

统计某个字段数量:

1
2
3
4
5
6
db.xxx.aggregate(
{ $group : {
_id: '$title', // titile是字段名 前必须添加$符
count: { $sum :1 } // 用作统计
}}
);

$sort:将输入文档排序后输出。

对统计结果排序 和普通排序命令相同
示例:

1
2
3
4
5
db.xxx.aggregate(
{ $sort : {
count: -1 // 按照`$group`分组字段数量降序排序
}}
);
微信打赏

你的赞赏是对我最大的鼓励