MongoDB 聚合索引应用

2023-04-14 13:39:35 浏览数 (1)

除了基本的查询之外,聚合索引还可以支持更复杂的聚合操作,如分组统计和数据分析。

例如,假设我们有一个包含订单信息的集合 orders,每个文档包含以下字段:

  • order_id:订单号
  • customer_id:客户ID
  • order_date:订单日期
  • total_amount:订单总金额
  • items:订单商品列表

我们可以使用聚合索引来对订单进行分组,按照客户ID和订单日期进行分组,并统计每个客户在每个月的订单数量和订单总金额。

首先,我们需要创建一个聚合索引:

代码语言:javascript复制
db.orders.createIndex({ "customer_id": 1, "order_date": 1 })

然后,我们可以使用聚合框架来进行分组统计:

代码语言:javascript复制
db.orders.aggregate([
  {
    $group: {
      _id: {
        customer_id: "$customer_id",
        year: { $year: "$order_date" },
        month: { $month: "$order_date" }
      },
      count: { $sum: 1 },
      total_amount: { $sum: "$total_amount" }
    }
  },
  {
    $project: {
      _id: 0,
      customer_id: "$_id.customer_id",
      year: "$_id.year",
      month: "$_id.month",
      count: 1,
      total_amount: 1
    }
  }
])

上面的聚合操作将订单按照客户ID、年份和月份进行分组,统计每个客户在每个月的订单数量和订单总金额。其中,$group 操作将订单分组并统计数量和金额,$project 操作将结果进行投影,只保留需要的字段。

这里使用了 $year$month 操作来获取订单日期的年份和月份,这些操作也可以通过聚合索引进行优化。

0 人点赞