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.