📜  MongoDB 中的聚合(1)

📅  最后修改于: 2023-12-03 15:17:41.986000             🧑  作者: Mango

MongoDB 中的聚合

在 MongoDB 中,聚合是一种强大的工具,可以使用它来对数据进行查询、分析和操作。聚合管道是 MongoDB 提供的最常用的聚合方式,它是由多个阶段组成的管道,在每个阶段中对文档进行转换,从而达到一定的目的。

聚合管道阶段

聚合管道由多个阶段组成,每个阶段都会对输入的文档进行处理,并将输出传递到下一个阶段。常用的聚合管道阶段有以下几种:

$match

$match 阶段会根据指定的条件筛选出符合条件的文档,并将其输出给下一个阶段。常见的筛选条件包括等于、大于、小于、不等于、包含等。

[
  {
    $match: {
      name: "user1"
    }
  }
]
$group

$group 阶段用于对文档进行分组,并进行聚合计算。通过指定分组依据和聚合计算条件,可以得出每个分组的统计结果。

[
  {
    $group: {
      _id: "$category",
      total: { $sum: "$qty" }
    }
  }
]
$sort

$sort 阶段用于对文档进行排序。可以指定排序依据、排序方式和排列顺序。

[
  {
    $sort: {
      date: -1
    }
  }
]
$project

$project 阶段用于筛选出文档中的指定字段,并进行重命名、计算和类型转换等操作。

[
  {
    $project: {
      _id: 0,
      name: 1,
      count: { $sum: "$qty" }
    }
  }
]
$limit

$limit 阶段用于限制输出文档的数量。

[
  {
    $limit: 10
  }
]
$lookup

$lookup 阶段用于对两个集合之间的数据进行查询和连接。可以根据指定的字段进行数据匹配和关联。

[
  {
    $lookup: {
      from: "orders",
      localField: "_id",
      foreignField: "user_id",
      as: "user_orders"
    }
  }
]
聚合管道实例

下面是一个示例聚合管道,它会对 sales 集合进行聚合计算,统计出每个商品的总销售量和平均销售价,并按照销售量从高到低进行排序。

[
  {
    $group: {
      _id: "$product_id",
      total_sales: { $sum: "$qty" },
      avg_price: { $avg: "$price" }
    }
  },
  {
    $sort: {
      total_sales: -1
    }
  }
]
总结

聚合管道是 MongoDB 中非常有用的一个功能,它可以对数据进行灵活的查询、分析和操作。掌握聚合管道的使用方法,可以让我们更加高效地处理 MongoDB 中的数据。