W standardowym DBMS SQL można to zrobić za pomocą następującego zapytania:
SELECT type, count(*) as ct FROM table GROUP BY type ORDER BY ct;
na mongodb można to zrobić za pomocą funkcji group, chociaż jest to nieco bardziej skomplikowane:
db.collection.group(
{key: { "type":true},
reduce: function(obj,prev) { prev.count += 1; },
initial: { count: 0 }
});
Tutaj proszę db o zwrócenie wartości dla klucza „typ” (stąd „prawda”), a dla każdej wartości podana funkcja Reduce będzie używana do agregowania znalezionych rekordów. Tutaj tylko aktualizuję licznik, ile razy pojawia się każdy rekord. Jeśli uruchomisz to zapytanie, otrzymasz coś takiego:
[
{
"type" : "report",
"count" : 5
},
{
"type" : "memo",
"count" : 15
}
{
"type" : "research",
"count" : 3
}
]
Zauważysz, że to nie jest uporządkowane; nawet dokumentacja mongodb mówi, że najłatwiejszym sposobem zamówienia jest zrobienie tego po stronie klienta.
Odpowiednia dokumentacja znajduje się tutaj .