Medan .distinct() fungerar bra för att bara få de distinkta värdena för ett fält, för att faktiskt få räkningar av förekomster, detta är bättre lämpat för aggregeringsramverket:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Även .distinct() metoden "abstrakterar" från där det angivna "distinkta" fältet faktiskt finns inom en array. I det här fallet måste du ringa $unwind först att bearbeta array-elementen här:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Så det huvudsakliga arbetet görs i princip i $group genom att "gruppera" på fältvärdena, vilket betyder samma sak som "distinkt". $sum är en grupperingsoperator som i det här fallet bara lägger ihop 1 för varje förekomst av det värdet i fältet för den samlingen.