mongodb - 使用 MongoDB 按函数嵌套分组

标签 mongodb mongoid mongodb-ruby

我是 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/

相关文章:

ruby - MongoDB 驱动程序 ruby​​,删除文档中的字段

ruby - 获取 MongoDB 中列的最高值

node.js - 错误 : cyclic dependency detected with Mongo + Nodejs Project

database - 当集合被更改时,MongoDB 游标如何表现?

java - MongoDB 复杂存储过程可以与 Java Web 服务一起使用吗

ruby-on-rails - Moped::BSON::ObjectId 或 Rails 模型中父 ID 的字符串?

mongodb - 我应该将 Mongoid 嵌入多深?

c# - .NET MongoDB 连接的最佳实践?

mongodb - 使用 MongoDB 进行自引用更新

ruby - 使用 SSL 通过 Ruby 驱动程序连接到 Mongod 返回 Mongo::ConnectionFailure