mongodb 的数据聚合过程通常会配合管道操作,mongodb 的管道操作概念类似于 LInux 中的管道概念,mongodb 的聚合管道将 mongodb 文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操作是可以以此重复的;
mongodb 管道使用 aggregte() 方法,使用管道表达式表示一个管道过程,表达式是无状态的,只能计算当前聚合管道的文档,不能处理其他文档,以下是常用的几种管道操作表达式:
聚合操作使用 aggregate() 函数,该函数原型为:db.collection_name.aggregate(<opeation>)
其中 opeation 参数常用的表达式:

关于管道完整表达式列表的用法,参见:
[](https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/](https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/))
示例使用
以下为示例使用集合 blog 的文档结构:
{
_id: ObjectId("5a88f21ac05302a3b998abb9"),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
author: 'assad',
url: '<http://blog.assad.artcile/1>',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId("5a88f278c05302a3b998abba"),
title: 'NoSQL Overview',
description: 'No sql database is very fast',
author: 'Tim',
url: '<http://blog.assad.artcile/34>',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 233
},
{
_id: ObjectId("5a88f299c05302a3b998abbb"),
title: 'SqlLite Overview',
description: 'SqlLite is no sql database',
author: 'assad',
url: '<http://blog.assad.artcile/213>',
tags: ['SqlLite', 'database', 'NoSQL'],
likes: 666
}
聚合管道操作示例: