MongoDB计数不同的值?

下面显示我的代码。 我必须计算重复值的次数。 在这里,我有存储在“结果”独特的价值。我用collection.count()来计算,但它不工作。 请任何人告诉我,我不得不错误。 非常感谢你 。

var DistinctIntoSingleDB = function(Collection,arr,opt,distVal,callback){ Collection.find({}).distinct(distVal, function(err, results) { if(!err && results){ console.log("Distinct Row Length :", results.length); var a,arr1 = []; for(var j=0; j<results.length; j++){ collection.count({'V6': results[j]}, function(err, count) { console.log(count) }); arr1.push(results[j]+ " : " +a); } callback(results,arr1); }else{ console.log(err, results); callback(results); } }); 

       

网上收集的解决方案 "MongoDB计数不同的值?"

在集合“col1”上获得字段“field1”的不同值的出现并写入单独的集合“distinctCount”。 如果集合很大,也允许使用磁盘空间。

 db.col1.aggregate( [{$group: { _id: "$field1", count: { $sum : 1 } }}, { $group: { _id: "$_id", count: { $sum : "$count" } }},{ $out: "distinctCount" }], {allowDiskUse:true} ) 

虽然.distinct()适用于获取字段的不同值,但为了实际获得出现次数,这更适合于聚合框架 :

 Collection.aggregate([ { "$group": { "_id": "$field", "count": { "$sum": 1 } }} ],function(err,result) { }); 

另外, .distinct()方法从指定的“distinct”字段实际上在数组内的位置“抽象”。 在这种情况下,您需要先调用$unwind来处理这里的数组元素:

 Collection.aggregate([ { "$unwind": "$array" }, { "$group": { "_id": "$array.field", "count": { "$sum": 1 } }} ],function(err,result) { }); 

所以主要工作基本上是在$group对字段值进行“分组”,这意味着与“distinct”相同的事情。 $sum是一个分组操作符,在这种情况下,该集合的字段中每次出现该值时只会加1