我是 MongoDB 的新手,长期使用 MySQL,但遇到了一个小障碍。
给定以下示例数据:
TeamID 日订单金额
100 4/1 50
100 4/1 40
200 4/2 50
100 4/2 20
我试图找出团队每天的平均订单量。我可以使用 mapReduce 函数进行简单查询,以使用 TeamId 和 Day 进行分组。所以现在我有:
TeamID 天 AvgAmount
100 4/1 45
200 4/2 50
100 4/2 20
现在我正在尝试汇总这些数据以获得每个团队每天的平均订单量,即:
天 平均金额
4/1 47.5
4/2 35
我可以使用 MySQL 轻松完成此操作,但我无法弄清楚如何使用 MongoDB 执行此操作,而不是在应用程序端手动执行,而不是使用 MongoDB。
最佳答案
您可以使用 map-reduce 或 group() 计算这些聚合功能。我使用 group() 是因为它更简单和更快,但是如果您需要在分片集群上分发查询,您应该使用 map-reduce。
首先加载数据:
db.orders.insert( { teamid: 100, date: "4/1", amount: 50 })
db.orders.insert( { teamid: 100, date: "4/1", amount: 40 })
db.orders.insert( { teamid: 200, date: "4/2", amount: 50 })
db.orders.insert( { teamid: 100, date: "4/2", amount: 20 })
每个团队每天:
db.orders.group({
key: { teamid: true, date: true },
reduce: function(doc, out) { out.sum += doc.amount; out.count++; },
initial: { sum: 0, count: 0 },
finalize: function(out) { out.average = out.sum / out.count }
});
要汇总每日汇总,只需更改 key :
db.orders.group({
key: { date: true },
reduce: function(doc, out) { out.sum += doc.amount; out.count++; },
initial: { sum: 0, count: 0 },
finalize: function(out) { out.average = out.sum / out.count }
});
关于mongodb - 使用 MongoDB 按函数嵌套分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078671/