Я пытаюсь получить список количества записей с массивами разного размера. Я хочу получить распределение размеров массивов для всех записей, чтобы построить гистограмму следующим образом:
| *
| *
documents | * *
| * * *
|_*__*__*___*__*___
2 5 6 23 47
Array Size
Исходные документы выглядят примерно так:
{hubs : [{stuff:0, id:6}, {stuff:1"}, .... ]}
{hubs : [{stuff:0, id:6}]}`
Пока что используется структура агрегации и некоторая справочная информация здесь I ' я придумал
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:'$_id', count:{$sum:1}}},
{ $group : {_id:'$count', count:{$sum:1}}},
{ $sort : {_id: 1}}])
Кажется, это дает мне желаемые результаты, но не очень быстро. Мне интересно, могу ли я сделать что-то подобное, для чего не потребуются два групповых вызова. Синтаксис здесь неправильный, но я пытаюсь поместить значение счетчика в первое поле _id:
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:{$count:$hubs}, count:1}},
{ $sort : { _id: 1 }}])