У меня есть несколько документов с этой схемой, каждый документ для каждого продукта в день:MongoDB Совокупная сумма Каждый ключ на поддокумента
{
_id:{},
app_id:'DHJFK67JDSJjdasj909',
date:'2014-08-07',
event_count:32423,
event_count_per_type: {
0:322,
10:4234,
20:653,
30:7562
}
}
Я хотел бы получить сумму каждого event_type для конкретного DATE_RANGE ,
Это результат, который я ищу, где каждый тип события был суммирован по всем документам. Ключи для event_count_per_type могут быть любыми, поэтому мне нужно что-то, что может проходить через каждый из них, а не быть имплицитным с их именами.
{
app_id:'DHJFK67JDSJjdasj909',
event_count:324236456,
event_count_per_type: {
0:34234222,
10:242354,
20:456476,
30:56756
}
}
Я пытался несколько запросов до сих пор, это лучшее, что я получил до сих пор, но значения документа к югу не суммируются:
db.events.aggregate(
{
$match: {app_id:'DHJFK67JDSJjdasj909'}
},
{
$group: {
_id: {
app_id:'$app_id',
},
event_count: {$sum:'$event_count'},
event_count_per_type: {$sum:'$event_count_per_type'}
}
},
{
$project: {
_id:0,
app_id:'$_id.app_id',
event_count:1,
event_count_per_type:1
}
}
)
Выход я вижу это значение 0 для ключа event_count_per_type, а не объекта. Я мог бы изменить схему, чтобы ключи находились на верхнем уровне документа, но это все равно означает, что мне нужно иметь запись в выражении группы для каждого ключа, поскольку, поскольку я не знаю, какие имена клавиш я не могу делать.
Любая помощь будет оценена, я готов изменить свою схему, если это необходимо, а также попробовать MapReduce (хотя из документации кажется, что производительность плохо.)
Если вы не знаете имен ключей в поддокументах, то вы не можете сделать это с помощью агрегации (хотя вы могли бы с уменьшением карты). Вы уверены, что имя ключа может быть * ничего * вообще? или это может быть только число в определенном диапазоне? Это может быть «foo»? Или это может быть только число от 0 до 59 или какое-то такое? –
@ АсяКамский это будет между 0 и 100 – Irfan