MongoDB映射-还原结果不准确
我在MongoDB中有如下数据结构MongoDB映射-还原结果不准确,mongodb,mapreduce,Mongodb,Mapreduce,我在MongoDB中有如下数据结构 { "_id" : ObjectId("523aab00045624a385e5f549"), "name" : "English Book 29", "SKU" : 1000549081, "price" : 249000, "image" : null, "category_id" : ObjectId("523a7802b50418baf38b4575"), "category_name" : "E
{
"_id" : ObjectId("523aab00045624a385e5f549"),
"name" : "English Book 29",
"SKU" : 1000549081,
"price" : 249000,
"image" : null,
"category_id" : ObjectId("523a7802b50418baf38b4575"),
"category_name" : "English Book",
"details" : {
"Title" : "Title 549081",
"Binding" : 1,
"Author" : "Author 0",
"Publication data" : 0.5263832447608386,
"Publisher name" : "Publisher name 14",
"Number of page" : 90
}
}
书籍装订有两个价值:
0表示软绑定,1表示硬绑定。我将Map Reduce写入每个值的统计信息
var map = function()
{
for(var key in this.details)
{
if(key == 'Binding')
{
emit({name: key}, {
'data':
[
{
name: this.details[key],
count: 1
}
]
});
}
}
};
var reduce = function (key, values) {
var reduced = {};
for(var i in values)
{
var inter = values[i];
for(var j in inter.data)
{
if(typeof(reduced[inter.data[j].name]) != "undefined")
{
reduced[inter.data[j].name] += inter.data[j].count;
}
else
{
reduced[inter.data[j].name] = 1;
}
}
}
return reduced;
};
当我使用小数据(50条记录)运行时,结果会准确返回。但当我使用真实数据(192000条记录)运行它时,结果返回的并不准确。结果如下
{
"_id" : {
"name" : "Binding"
},
"value" : {
"0" : 50,
"1" : 50
}
}
"counts" : {
"input" : 192000,
"emit" : 192000,
"reduce" : 1920,
"output" : 1
},
当映射/减少完成时,我检查了返回数据,结果如下
{
"_id" : {
"name" : "Binding"
},
"value" : {
"0" : 50,
"1" : 50
}
}
"counts" : {
"input" : 192000,
"emit" : 192000,
"reduce" : 1920,
"output" : 1
},
有什么问题吗。欢迎任何建议、解释。
感谢并致以最诚挚的问候,在昨天研究了Map/Reduce之后,我意识到,“Emit”一次发送100个元素,“Reduce”在这个数据集上执行。所以我上面的代码是错误的,因为它只对小数据集进行“求和”。 下面是我的MapReduce新代码
var map = function ()
{
for(var key in this.details)
{
if(key == 'Binding')
{
var value = {};
value[this.details[key]] = 1;
emit(key, value);
}
}
}
var reduce = function (key, values)
{
var reduced = {};
for(var idx = 0; idx < values.length; idx++)
{
var inner = values[idx];
for (var j in inner)
{
if (typeof (reduced[j]) == 'undefined')
{
reduced[j] = 0;
}
reduced[j] += inner[j];
}
}
return reduced;
}
var map=函数()
{
for(此.details中的var键)
{
如果(键==“绑定”)
{
var值={};
值[this.details[key]]=1;
发射(键、值);
}
}
}
var reduce=函数(键、值)
{
var-reduced={};
对于(var idx=0;idx
我在这里为任何遇到类似情况的人发帖。谢谢你的阅读