While .distinct()
works well for just obtaining the distinct values for a field, in order to actually get the counts of occurrences, this is better suited to the aggregation framework:
Collection.aggregate([
{ "$group": {
"_id": "$field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
Also the .distinct()
method does "abstract" from where the specified "distinct" field is actually within an array. In this case you need to call $unwind
first to process the array elements here:
Collection.aggregate([
{ "$unwind": "$array" },
{ "$group": {
"_id": "$array.field",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
So the main work is basically done in the $group
by "grouping" on the field values, which means the same thing as "distinct". The $sum
is a grouping operator which in this case just adds up 1
for each occurrence of that value in the field for that collection.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…