管道操作


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
}

聚合管道操作示例: