mongodb - Calculate Average Duration from a Series of Dates
问题描述
Well, I have one collection with too much documents(millions), and now i wanna know how I can calculate average of session duration.
This is a example of structure of my docs:
{
"session" : "xyz",
"date" : {"$date" : ""Tue May 15 2018 10:35:08 GMT-0400 LT""}
}
{
"session" : "xyz",
"date" : {"$date" : ""Tue May 15 2018 12:35:08 GMT-0400 LT""}
}
{
"session" : "xyz",
"date" : {"$date" : ""Tue May 15 2018 15:35:08 GMT-0400 LT""}
}
{
"session" : "abc",
"date" : {"$date" : ""Tue May 15 2018 09:35:08 GMT-0400 LT""}
}
{
"session" : "abc",
"date" : {"$date" : ""Tue May 15 2018 11:35:08 GMT-0400 LT""}
}
And I wanna define a algorithm like this:
- Get all documents by "$session"
- Calculate min(first) date and max(last) date of these(2nd point) documents.
- Calculate duration(time difference) by session
- Repat first 1st point with another "$session"
- after calculate all average by "$session", calculate average of these total.
I think first need using aggregate
with $group, but I dont have experience with that and now I have a existencial problem hahaha
Thanks
解决方案
只要“顺序”在这里并不重要$min
并且$max
是正确的事情:
db.collection.aggregate([
{ "$group": {
"_id": "$session",
"minDate": { "$min": "$date" },
"maxDate": { "$max": "$date" }
}},
{ "$group": {
"_id": null,
"avg": {
"$avg": { "$subtract": [ "$maxDate", "$minDate" ] }
}
}}
])
初始值从提供的“分组键”中$group
获取$min
和值,这是文档中的值。第二个是在没有任何分组键(或)的情况下完成的,以便积累“一切”。$max
"session"
$group
null
当您将$subtract
一个 BSON 日期与另一个日期时,结果是以毫秒为单位的差异。通常,这也是一种转换为数值的处理方式。但是您所做的只是$subtract
从$min
and输出两个值$max
并将其馈送到$avg
累加器。
推荐阅读
- python - 在创建列表和创建列表之后应用扩展和追加方法有什么区别
- python - 理解可变数量的参数?
- c++ - 我可以更好地找到给定值在二叉搜索树中的位置吗?
- css - CSS ::添加环形后
- javascript - 在嵌套对象中搜索“键”并显示其值 Javascript
- flutter - 可以将哈希码与 <= => 符号进行比较吗?
- python - “pip install selenium”不起作用 // 使用 python 3 // windows 10
- c# - 控制台模板应用程序 MediaCapture 无法录制视频
- c# - 如何配置 appsettings 日志记录部分以使用过滤器定义提供程序?
- flutter - 可拖动小部件不会改变其位置