Terwijl .distinct()
werkt goed om alleen de afzonderlijke waarden voor een veld te verkrijgen, om het aantal exemplaren daadwerkelijk te krijgen, dit is beter geschikt voor het aggregatieraamwerk:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Ook de .distinct()
methode doet "abstract" van waar het gespecificeerde "verschillende" veld zich feitelijk binnen een array bevindt. In dit geval moet je $unwind
. bellen eerst de array-elementen hier verwerken:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Dus het belangrijkste werk wordt in principe gedaan in de $group
door "groeperen" op de veldwaarden, wat hetzelfde betekent als "onderscheiden". De $sum
is een groeperingsoperator die in dit geval gewoon 1
. optelt voor elk exemplaar van die waarde in het veld voor die verzameling.