Enquanto
.distinct()
funciona bem apenas para obter os valores distintos para um campo, para realmente obter as contagens de ocorrências, isso é mais adequado para a estrutura de agregação:Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Também o
.distinct()
O método "abstrai" de onde o campo "distinto" especificado está realmente dentro de uma matriz. Nesse caso, você precisa chamar $unwind
primeiro a processar os elementos da matriz aqui:Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Então o trabalho principal é feito basicamente no
$group
por "agrupamento" nos valores do campo, o que significa a mesma coisa que "distinto". A $sum
é um operador de agrupamento que neste caso apenas soma 1
para cada ocorrência desse valor no campo dessa coleção.