Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDb对多列求和_Mongodb_Mapreduce - Fatal编程技术网

MongoDb对多列求和

MongoDb对多列求和,mongodb,mapreduce,Mongodb,Mapreduce,我涉足mongoDb并尝试使用MapReduce查询。我需要对不同列中的多个值(num1、num2、num3、num4、num5)求和。离开这个指南。在这里,我试图改变第一个例子来总结所有的值 这就是我正在尝试的。我不确定它是否可以接受像这样的多个值,我只是假设 var query1 = function(){ emit("sumValues", this.num1, this.num2, this.num3, this.num4, this.num5)}; var query1que

我涉足mongoDb并尝试使用MapReduce查询。我需要对不同列中的多个值(num1、num2、num3、num4、num5)求和。离开这个指南。在这里,我试图改变第一个例子来总结所有的值

这就是我正在尝试的。我不确定它是否可以接受像这样的多个值,我只是假设

var query1 = function(){ emit("sumValues", this.num1, this.num2, this.num3, this.num4, this.num5)};

    var query1query = function(sumValues, totalSumOfValues){ return Array.sum(totalSumOfValues); }

    db.testData.mapReduce( query1, query1query, {out: "query_one_results"})
这就是我得到的错误。 Sun Dec 1 18:52:24.627 JavaScript执行失败:映射减少失败:{ “errmsg”:“异常:JavaScript执行失败:错误:fast\u emit在'action(){emit(\'sumValues\',this.c')附近接受2个参数, “代码”:16722, “确定”:0

有没有其他方法来总结所有这些值?或者我的错误在哪里

我也尝试过这个方法,它似乎很有效。但是当我对它创建的文件执行.find()时,它似乎只是在检索sum5的值并将它们相加

var query1 = function(){ emit({sum1: this.sum1,sum2: this.sum2,sum3: this.sum3,sum4: this.sum4,sum5:  this.sum5},{count:1});}
 var query1query = function(key, val){ return Array.sum(val); };
 db.testData.mapReduce( query1, query1query, {out: "query_one_results"})
{
        "result" : "query_one_results",
        "timeMillis" : 19503,
        "counts" : {
                "input" : 173657,
                "emit" : 173657,
                "reduce" : 1467,
                "output" : 166859
        },
        "ok" : 1,
}
好的,我想我明白了。这就是我最后做的

> var map1= function(){
... emit("Total Sum", this.sum1);
... emit("Total Sum", this.sum2);
... emit("Total Sum", this.sum3);
... emit("Total Sum", this.sum4);
... emit("Total Sum", this.sum5);
... emit("Total Sum", this.sum6);
… };

> var reduce1 = function(key, val){
... return Array.sum(val)
... };
> db.delayData.mapReduce(map1,reduce1,{out:'query_one_result'});
{
        "result" : "query_one_result",
        "timeMillis" : 9264,
        "counts" : {
                "input" : 173657,
                "emit" : 1041942,
                "reduce" : 1737,
                "output" : 1
        },
        "ok" : 1,
}

> db.query_one_result.find()
{ "_id" : "Total Sum", "value" : 250 }

您得到了需要在map backwards中发出的两个值。第一个值表示一个唯一的键值,您要在该键值上聚合某些内容。第二个值是您要聚合的内容

因为您试图为整个集合(看起来)获取一个和,所以您需要输出一个键,然后对于值,您需要输出每个文档的四个字段的和

map = function() { emit(1, this.num1+this.num2+this.num3+this.num4+this.num5); }
reduce = function(key, values) { return Array.sum(values);   }
只要在每个文档中都设置了num1到num5,这就行了——您只需检查这些字段中的每个字段是否存在,如果存在,则将其值添加到中,就可以使函数更加健壮

在现实生活中,使用聚合框架可以更快、更简单地完成这项工作:

db.collection.aggregate({$group:{{$group:{_id:1, sum:{$sum:{$add:["$num1","$num2","$num3","$num4","$num5"]}}}})

您得到了需要在map backwards中发出的两个值。第一个值表示一个唯一的键值,您要在该键值上聚合某些内容。第二个值是您要聚合的内容

因为您试图为整个集合(看起来)获取一个和,所以您需要输出一个键,然后对于值,您需要输出每个文档的四个字段的和

map = function() { emit(1, this.num1+this.num2+this.num3+this.num4+this.num5); }
reduce = function(key, values) { return Array.sum(values);   }
只要在每个文档中都设置了num1到num5,这就行了——您只需检查这些字段中的每个字段是否存在,如果存在,则将其值添加到中,就可以使函数更加健壮

在现实生活中,使用聚合框架可以更快、更简单地完成这项工作:

db.collection.aggregate({$group:{{$group:{_id:1, sum:{$sum:{$add:["$num1","$num2","$num3","$num4","$num5"]}}}})

您得到了需要在map backwards中发出的两个值。第一个值表示一个唯一的键值,您要在该键值上聚合某些内容。第二个值是您要聚合的内容

因为您试图为整个集合(看起来)获取一个和,所以您需要输出一个键,然后对于值,您需要输出每个文档的四个字段的和

map = function() { emit(1, this.num1+this.num2+this.num3+this.num4+this.num5); }
reduce = function(key, values) { return Array.sum(values);   }
只要在每个文档中都设置了num1到num5,这就行了——您只需检查这些字段中的每个字段是否存在,如果存在,则将其值添加到中,就可以使函数更加健壮

在现实生活中,使用聚合框架可以更快、更简单地完成这项工作:

db.collection.aggregate({$group:{{$group:{_id:1, sum:{$sum:{$add:["$num1","$num2","$num3","$num4","$num5"]}}}})

您得到了需要在map backwards中发出的两个值。第一个值表示一个唯一的键值,您要在该键值上聚合某些内容。第二个值是您要聚合的内容

因为您试图为整个集合(看起来)获取一个和,所以您需要输出一个键,然后对于值,您需要输出每个文档的四个字段的和

map = function() { emit(1, this.num1+this.num2+this.num3+this.num4+this.num5); }
reduce = function(key, values) { return Array.sum(values);   }
只要在每个文档中都设置了num1到num5,这就行了——您只需检查这些字段中的每个字段是否存在,如果存在,则将其值添加到中,就可以使函数更加健壮

在现实生活中,使用聚合框架可以更快、更简单地完成这项工作:

db.collection.aggregate({$group:{{$group:{_id:1, sum:{$sum:{$add:["$num1","$num2","$num3","$num4","$num5"]}}}})

我还尝试为每个值指定一个键,但这不起作用。你是在尝试获取四个字段的和,还是学习map/reduce?因为使用聚合框架进行求和更容易。学习如何使用MapReduce我还尝试为每个值指定一个键,但这不起作用。你是在尝试获取四个字段的和,还是学习map/reduce?因为使用聚合框架进行求和更容易。这是为了学习如何使用MapReduce。我还尝试为每个值指定一个键,但这不起作用。你是在尝试获取四个字段的总和,还是在学习map/reduce?因为使用聚合框架进行求和更容易。这是为了学习如何使用MapReduce。我还尝试d为每个值指定一个键,但这不起作用。您是在尝试获取四个字段的总和,还是学习map/reduce?因为使用聚合框架进行总和更容易。这是学习如何使用mapreduce