В стандартной СУБД SQL это можно сделать с помощью следующего запроса:
SELECT type, count(*) as ct FROM table GROUP BY type ORDER BY ct;
на mongodb это можно сделать с помощью групповой функции, хотя это немного сложнее:
db.collection.group(
{key: { "type":true},
reduce: function(obj,prev) { prev.count += 1; },
initial: { count: 0 }
});
Здесь я прошу БД вернуть значения для ключа «тип» (отсюда и «истина»), и для каждого значения данная функция сокращения будет использоваться для агрегации найденных записей. Здесь я просто обновляю счетчик того, сколько раз появляется каждая запись. Если вы выполните этот запрос, вы получите что-то вроде этого:
[
{
"type" : "report",
"count" : 5
},
{
"type" : "memo",
"count" : 15
}
{
"type" : "research",
"count" : 3
}
]
Вы заметите, что это не заказано; даже документы mongodb говорят, что самый простой способ заказать это сделать на стороне клиента.
Соответствующая документация здесь .