У меня есть документ, который описывает количество различных вещей, наблюдаемых камерой в течение 15 минут.Это выглядит следующим образом:
{
"_id" : ObjectId("5b1a709a83552d002516ac19"),
"start" : ISODate("2018-06-08T11:45:00.000Z"),
"end" : ISODate("2018-06-08T12:00:00.000Z"),
"recording" : ObjectId("5b1a654683552d002516ac16"),
"data" : {
"counts" : {
"5b434d05da1f0e00252566be" : 12,
"5b434d05da1f0e00252566cc" : 4,
"5b434d05da1f0e00252566ca" : 1
}
}
}
Ключи внутри data.counts
объекта меняются с каждым документом и ссылаются на дополнительные данные, которые извлекаются позднее.В data.counts имеется неограниченное количество ключей (но обычно их около 20)
Я пытаюсь объединить все эти 15-минутные документы до ежедневных агрегированных документов.
У меня есть этот запрос намомент, чтобы сделать это:
db.getCollection("segments").aggregate([
{$match:{
"recording": ObjectId("5bf7f68ad8293a00261dd83f")
}},
{$project:{
"start": 1,
"recording": 1,
"data": 1
}},
{$group:{
_id: { $dateToString: { format: "%Y-%m-%d", date: "$start" } },
"segments": { $push: "$$ROOT" }
}},
{$sort: {_id: -1}},
]);
Это группирует и возвращает все segments
в массиве.
Я хочу также агрегировать информацию внутри data.counts
, так что яполучить сумму значений для всех ключей, которые одинаковы в дневной группе.
Это избавило бы меня от необходимости повторять цикл обслуживания через каждые 15-минутные значения суммирования сегментов с теми же ключами.Например, запрос будет возвращать что-то вроде этого:
{
"_id" : "2019-02-27",
"counts" : {
"5b434d05da1f0e00252566be" : 351,
"5b434d05da1f0e00252566cc" : 194,
"5b434d05da1f0e00252566ca" : 111
... any other keys that were found within a day
}
}
Как я могу изменить запрос, который у меня уже есть, или использовать другой запрос?
Спасибо!