我試圖聚集基於它們之間的時間差事件文件到會議文件: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