Javascript MongoDB计数不同值?
下面显示我的代码。我必须计算不同值重复的次数。在这里,我在“results”中存储了不同的值。我使用collection.count()进行计算,但它不起作用。请任何人告诉我哪里出了错。多谢各位Javascript MongoDB计数不同值?,javascript,node.js,mongodb,mongodb-query,aggregation-framework,Javascript,Node.js,Mongodb,Mongodb Query,Aggregation Framework,下面显示我的代码。我必须计算不同值重复的次数。在这里,我在“results”中存储了不同的值。我使用collection.count()进行计算,但它不起作用。请任何人告诉我哪里出了错。多谢各位 var DistinctIntoSingleDB = function(Collection,arr,opt,distVal,callback){ Collection.find({}).distinct(distVal, function(err, results) { if(!err
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);
}
});
var-distincentosingledb=function(Collection、arr、opt、distVal、callback){
Collection.find({}).distinct(distVal,函数(err,results){
if(!err&&results){
log(“不同的行长度:”,results.Length);
var a,arr1=[];
对于(var j=0;jWhile.distinct()
而言,只需获取字段的不同值即可,为了实际获取出现次数,这更适合于:
Collection.aggregate([
{“$组”:{
“_id”:“$field”,
“计数”:{“$sum”:1}
}}
],函数(错误,结果){
});
另外,.distinct()
方法会从指定的“distinct”字段实际位于数组中的位置进行“抽象”。在这种情况下,您需要首先调用以在此处处理数组元素:
Collection.aggregate([
{“$unwind”:“$array”},
{“$组”:{
“_id”:“$array.field”,
“计数”:{“$sum”:1}
}}
],函数(错误,结果){
});
因此,主要工作基本上是通过对字段值进行“分组”来完成的,这与“不同”的含义相同。是一个分组运算符,在本例中,它只为该集合字段中该值的每次出现加上1
。以获取集合“col1”上字段“field1”的不同值的出现,并写入单独的集合“distinctCount”。还允许在集合很大的情况下使用磁盘空间
db.col1.aggregate(
[{$group: {
_id: "$field1",
count: { $sum : 1 }
}}, {
$group: {
_id: "$_id",
count: { $sum : "$count" }
}},{
$out: "distinctCount"
}],
{allowDiskUse:true}
)
第二个$group
实际上并没有在这里做任何事情,因为它只是使用相同的\u id
值,并将相同的输出值传递给$sum
。另外$out
也是在相同的版本中引入的,默认的.aggregate()
输出实际上是一个“光标”,因此以前单个BSON文档中的结果问题在这里不再是问题。shell以外的其他API可能会“默认”为BSON文档,但它们可以很容易地更改为返回“游标”。您只需在实际“打算”为结果创建新集合的地方使用$out
。