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.