Mentre .distinct()
funziona bene solo per ottenere i valori distinti per un campo, al fine di ottenere effettivamente il conteggio delle occorrenze, questo è più adatto al framework di aggregazione:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Anche il .distinct()
il metodo "astratto" da dove il campo "distinto" specificato si trova effettivamente all'interno di una matrice. In questo caso devi chiamare $unwind
prima di elaborare gli elementi dell'array qui:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Quindi il lavoro principale viene sostanzialmente svolto nel $group
mediante "raggruppamento" sui valori del campo, che significa la stessa cosa di "distinto". Il $sum
è un operatore di raggruppamento che in questo caso somma semplicemente 1
per ogni occorrenza di quel valore nel campo per quella raccolta.