MongoDb对多列求和
我涉足mongoDb并尝试使用MapReduce查询。我需要对不同列中的多个值(num1、num2、num3、num4、num5)求和。离开这个指南。在这里,我试图改变第一个例子来总结所有的值 这就是我正在尝试的。我不确定它是否可以接受像这样的多个值,我只是假设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
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