У меня есть следующая структура документа в MongoDB:
{
"_id" : ObjectId("5c1b7451b1829b69963029ea"),
"duration" : 92,
"accountId" : ObjectId("9aafe7b01cf4560c9bb5d68"),
"createdAt" : ISODate("2018-12-20T10:52:01.560Z"),
"__v" : 0,
},
{
"_id" : ObjectId("5c1b7451b1829b69963029ea"),
"duration" : 192,
"accountId" : ObjectId("9aafe7b01cf4560c9bb5d68"),
"createdAt" : ISODate("2018-12-20T11:52:01.560Z"),
"__v" : 0,
}
Теперь я хочу получить наибольшую сумму продолжительности дня с соответствующим часом.Технически, что-то вроде этого:
{
"readableDate" : "2018-12-20",
"hour" : 11,
"total" : 192
}
Где итоговая сумма - это максимальная почасовая сумма за данный конкретный день.
Запрос, который я пробовал, выглядит следующим образом:
db.getCollection('operational_details').aggregate(
{"$match": {"accountId": ObjectId("9aafe7b01cf4560c9bb5d68"),
"createdAt": {"$gte": ISODate("2019-06-01T10:30:29.725Z"),
"$lte": ISODate("2019-06-04T10:30:29.725Z")},
}},
{ "$project": {
"date": {"$dateToString": {"format": "%Y-%m-%d", "date": "$createdAt"}},
"hour": {"$hour":"$createdAt"},
"total":{"$sum": "$duration"} }
},
{ "$group":{
"_id": { "hour":"$hour","date":"$date"},
"max": {"$max": "$total"}
}})
Надеюсь, я ясно со своим примером.TIA