MongoDB 聚合管道:从基础到实战

2023-04-15 00:00:00 实战 管道 聚合

MongoDB 聚合管道是一系列可以处理数据的操作流程,它们依次执行并生成指定输出的过程。MongoDB 聚合管道中的每个阶段都是一个操作,不同阶段之间通过数据流将处理结果传递下去。聚合管道通常用于对大量文档进行处理和分析,可以对文档进行统计、筛选、分组等操作。

以下是 MongoDB 聚合管道的基础操作:

  1. $match:过滤文档,只保留符合条件的文档。
db.collection.aggregate([
  {$match: {title: "皮蛋编程"}},
  {$group: {_id: "$author", count: {$sum: 1}}}
])
  1. $group:根据指定条件将文档进行分组,可以进行统计和计算。
db.collection.aggregate([
  {$match: {title: "pidancode.com"}},
  {$group: {_id: "$author", count: {$sum: 1}}}
])
  1. $project:选择需要输出的文档字段,可以对字段进行重命名、计算和类型转换等操作。
db.collection.aggregate([
  {$match: {title: "pidancode.com"}},
  {$group: {_id: "$author", count: {$sum: 1}}},
  {$project: {name: "$_id", _id: 0, count: 1}}
])
  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}}
])
  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}
])
  1. $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 进行分组并进行文档数量统计,最后按数量降序排序。

相关文章