MongoDB中的时间聚合
在探索使用MongoDB进行实时分析的方法时,似乎有一个相当标准的方法来做总和,但没有任何更复杂的聚合。 有些事情已经帮助...
做和的基本方法是自动为每个新记录添加文档键,以缓存常见查询:
Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);
除了总和以外,这不适用于汇总。 我的问题是,像这样的事情可以用mongodb中的平均值 , 最小值和最大值来完成吗?
假设你有这样的文件:
{
:date => "04/27/2011",
:page_views => 1000,
:user_birthdays => ["12/10/1980", "6/22/1971", ...] # 1000 total
}
你能做一些原子或优化/实时操作,把生日分成这样的东西吗?
{
:date => "04/27/2011",
:page_views => 1000,
:user_birthdays => ["12/10/1980", "6/22/1971", ...], # 1000 total
:average_age => 27.8,
:age_rank => {
"0 to 20" => 180,
"20 to 30" => 720,
"30 to 40" => 100,
"40 to 50" => 0
}
}
...就像你可以做的Doc.collection.update({x => 1}, {"$push" => {"user_birthdays" => "12/10/1980"}})
添加一些东西到一个数组,而不必加载文档,你可以做这样的事情来平均/聚合数组吗? 有没有什么东西可以用于实时聚合?
MapReduce用于在批处理作业中执行此操作,我正在寻找诸如实时map-reduce之类的模式:
你能做一些原子或优化/实时操作,把生日分成这样的东西吗?
看起来您已经添加了两个字段age_rank
, average_age
。 这些都是根据您已拥有的数据有效计算的字段。 如果我向您提供页面浏览量和用户生日的文档,客户端代码应该非常简单,以查找最小/最大值,平均值等。
在我看来,你要求MongoDB为你服务器端执行聚合。 但是你添加了你不想使用Map / Reduce的限制?
如果我正确理解你的问题,你正在寻找可以说“将这个项目添加到数组并且让所有相关项目自我更新”的东西? 你不希望读者执行任何逻辑,你希望一切都在服务器端“神奇地”发生。
所以有三种不同的方法来解决这个问题,但目前只有其中一种:
不幸的是,你现在唯一的选择是#1。 幸运的是,我知道一些成功使用选项#1的人。
计划为即将发布的1.9.x不稳定版本计划工作,该版本可能具有聚合功能。
请参阅:https://jira.mongodb.org/browse/SERVER-447
当然,它可能会被bumepd发布到更高版本/
链接地址: http://www.djcxy.com/p/52255.html上一篇: Time Aggregations in MongoDB
下一篇: Get function backtrace in bash from trap handler (using caller)