Während .distinct() funktioniert gut, um nur die unterschiedlichen Werte für ein Feld zu erhalten, um tatsächlich die Anzahl der Vorkommen zu erhalten, ist dies besser für das Aggregations-Framework geeignet:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Auch die .distinct() -Methode "abstrahiert" von der Stelle, an der sich das angegebene "eindeutige" Feld tatsächlich innerhalb eines Arrays befindet. In diesem Fall müssen Sie $unwind aufrufen zuerst die Array-Elemente hier verarbeiten:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Die Hauptarbeit wird also grundsätzlich in der $group erledigt durch "Gruppierung" der Feldwerte, was dasselbe bedeutet wie "eindeutig". Die $sum ist ein Gruppierungsoperator, der in diesem Fall einfach 1 addiert für jedes Vorkommen dieses Werts im Feld für diese Sammlung.