MongoDB 聚合管道:从基础到实战
MongoDB 聚合管道是一系列可以处理数据的操作流程,它们依次执行并生成指定输出的过程。MongoDB 聚合管道中的每个阶段都是一个操作,不同阶段之间通过数据流将处理结果传递下去。聚合管道通常用于对大量文档进行处理和分析,可以对文档进行统计、筛选、分组等操作。
以下是 MongoDB 聚合管道的基础操作:
- $match:过滤文档,只保留符合条件的文档。
db.collection.aggregate([ {$match: {title: "皮蛋编程"}}, {$group: {_id: "$author", count: {$sum: 1}}} ])
- $group:根据指定条件将文档进行分组,可以进行统计和计算。
db.collection.aggregate([ {$match: {title: "pidancode.com"}}, {$group: {_id: "$author", count: {$sum: 1}}} ])
- $project:选择需要输出的文档字段,可以对字段进行重命名、计算和类型转换等操作。
db.collection.aggregate([ {$match: {title: "pidancode.com"}}, {$group: {_id: "$author", count: {$sum: 1}}}, {$project: {name: "$_id", _id: 0, count: 1}} ])
- $sort:对文档进行排序。
db.collection.aggregate([ {$match: {title: "pidancode.com"}}, {$group: {_id: "$author", count: {$sum: 1}}}, {$project: {name: "$_id", _id: 0, count: 1}}, {$sort: {count: -1}} ])
- $limit:对输出结果进行限制。
db.collection.aggregate([ {$match: {title: "pidancode.com"}}, {$group: {_id: "$author", count: {$sum: 1}}}, {$project: {name: "$_id", _id: 0, count: 1}}, {$sort: {count: -1}}, {$limit: 10} ])
- $skip:跳过指定数量的文档。
db.collection.aggregate([ {$match: {title: "pidancode.com"}}, {$group: {_id: "$author", count: {$sum: 1}}}, {$project: {name: "$_id", _id: 0, count: 1}}, {$sort: {count: -1}}, {$skip: 5}, {$limit: 10} ])
以下是一个完整的实战示例:统计每个标签下的文章数量,并按文章数量降序排序。
db.articles.aggregate([ {$unwind: "$tags"}, {$group: {_id: "$tags", count: {$sum: 1}}}, {$sort: {count: -1}} ])
在这个实例中,我们首先对每个文档的 tags 数组进行拆分,然后根据 tags 进行分组并进行文档数量统计,最后按数量降序排序。
相关文章