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.