Podczas gdy .distinct() działa dobrze tylko w celu uzyskania odrębnych wartości dla pola, aby faktycznie uzyskać liczbę wystąpień, jest to lepiej dopasowane do struktury agregacji:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Również .distinct() Metoda „wyodrębnia” miejsce, w którym określone „odrębne” pole faktycznie znajduje się w tablicy. W takim przypadku musisz zadzwonić $unwind najpierw przetworzymy tutaj elementy tablicy:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Więc główna praca jest zasadniczo wykonywana w $group poprzez „grupowanie” na wartościach pola, co oznacza to samo, co „różne”. $sum jest operatorem grupującym, który w tym przypadku po prostu dodaje 1 dla każdego wystąpienia tej wartości w polu tej kolekcji.