我试图聚集基于它们之间的时间差事件文件到会议文件:MongoDB - 如何基于文档之间的持续时间进行聚合?
- 如果(时间差> 20分钟) - >创建单独的会话
- 其他 - >合并到同一个会话
我正在查看map-reduce和组&聚合命令,但还没有拿出让我这样做的解决方案。
条件:
- 应该是比赛条件证明
- 将需要处理的数据变得可用(不必按时间顺序)= 20分钟
文件结构:
Event = Schema({
start: Date,
end: Date,
})
Session = Schema({
start: Date,
end: Date,
duration: Number //will be an aggregate for the time of the events, ignoring the time in between
})
最好的解决方案至今(效率不高&赛马不相条件证明):
,每new_event = {start, finish}
:
1. matched_events = Sessions.find{ start:{$lt:new_event.finish+20*60*1000},finish:{$gt:new_event.start-20*60*1000},
2. new_session = {start: $min:{matched_events.start}, finish: $max:{matched_events.finish}}
任何想法?
你试过做什么?向我们展示一些关于卡住的地方的代码,这将帮助我们找出问题所在。 – Roberto
我正在查看mongodb中可用的不同命令,无法找到动态使用事件间持续时间进行聚合的方法。 目前我最好的想法是通过使用查询($ gt,$ lt operators)在mongodb之外进行聚合并回写到mongo,但是然后我可以运行竞争条件,这会创建多个会话。 – tobyai
我明白了,你会发布一个文件的例子吗?我不认为'mapreduce'能够自己把这件事情弄清楚。 – Roberto