我的数据如下:
[
{
"start_time" : ISODate("2017-08-22T19:43:41.442Z"),
"end_time" : ISODate("2017-08-22T19:44:22.150Z")
},
{
"start_time" : ISODate("2017-08-22T19:44:08.344Z"),
"end_time" : ISODate("2017-08-22T19:46:25.500Z")
}
]
有没有办法运行聚合查询,它会给我一个频率结果,如:
{
ISODate("2017-08-22T19:43:00.000Z"): 1,
ISODate("2017-08-22T19:44:00.000Z"): 2,
ISODate("2017-08-22T19:45:00.000Z"): 1,
ISODate("2017-08-22T19:46:00.000Z"): 1
}
基本上我想按分钟分组,总结一下,但诀窍是每条记录可能会计入多个组。此外,与19:45的情况一样,数据中未明确提及日期(计算为在两个其他日期之间)。
起初我以为我可以用$ minute这样的功能来做到这一点。我可以按分钟分组并检查数据是否适合该范围。但是,如果可能的话,我会坚持如何实现。我不确定如何将单个条目转换为多个日期组。
答案 0 :(得分:2)
您可以在3.6 mongo版本中使用以下聚合。
db.col.aggregate([
{"$addFields":{"date":["$start_time","$end_time"]}},
{"$unwind":"$date"},
{"$group":{
"_id":{
"year":{"$year":"$date"},
"month":{"$month":"$date"},
"day":{"$dayOfMonth":"$date"},
"hour":{"$hour":"$date"},
"minute":{"$minute":"$date"}
},
"count":{"$sum":1}
}},
{"$addFields":{
"_id":{
"$dateFromParts":{
"year":"$_id.year",
"month":"$_id.month",
"day":"$_id.day",
"minute":"$_id.minute"
}
}
}}
])