除了基本的查询之外,聚合索引还可以支持更复杂的聚合操作,如分组统计和数据分析。
例如,假设我们有一个包含订单信息的集合 orders
,每个文档包含以下字段:
order_id
:订单号customer_id
:客户IDorder_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
操作来获取订单日期的年份和月份,这些操作也可以通过聚合索引进行优化。