MongoDB Map Reduce将文档与动态模式相结合
我正在尝试我认为应该是一个简单的MapReduce,但是我遇到了麻烦,因为我找不到如何编写服务器端javascript的参考 有两份文件:MongoDB Map Reduce将文档与动态模式相结合,mongodb,mapreduce,Mongodb,Mapreduce,我正在尝试我认为应该是一个简单的MapReduce,但是我遇到了麻烦,因为我找不到如何编写服务器端javascript的参考 有两份文件: { "_id" : ObjectId("530c8b58d95cd926144055d9"), "atomic" : "p", "doc" : { "d1" : "t" }, "array" : ["e"] }, { "_id" : ObjectId("530c8b71d95cd926144055da"), "atomic
{
"_id" : ObjectId("530c8b58d95cd926144055d9"),
"atomic" : "p",
"doc" : {
"d1" : "t"
},
"array" : ["e"]
},
{
"_id" : ObjectId("530c8b71d95cd926144055da"),
"atomic" : "p",
"doc" : {
"d2" : "r"
},
"array" : ["f"]
}
我希望结果是
{
"_id" : "p",
"value" : {
"doc" : {
"d1" : "t",
"d2" : "r"
},
"array" : ["e", "f"]
}
}
地图功能是:
function () {
emit(
this.atomic,
{doc: this.doc, array: this.array}
);
}
function (key, values) {
var reduced = {doc:{}, array:[]};
values.forEach(function(val){
for(var i = 0; i < val.array.length; i++)
reduced.array.push(val.array[i]);
val.doc.forEach(function(kvp){reduced.doc.add(kvp.key, kvp.value);});
});
return reduced;
}
不正确的reduce函数是:
function () {
emit(
this.atomic,
{doc: this.doc, array: this.array}
);
}
function (key, values) {
var reduced = {doc:{}, array:[]};
values.forEach(function(val){
for(var i = 0; i < val.array.length; i++)
reduced.array.push(val.array[i]);
val.doc.forEach(function(kvp){reduced.doc.add(kvp.key, kvp.value);});
});
return reduced;
}
函数(键、值){
var reduced={doc:{},数组:[]};
值。forEach(函数(val){
对于(var i=0;i
带有数组的部分很好,它试图合并混乱的文档(即,由于缺少函数而无法执行)。我已经尝试了我能想到的所有排列——如果我将val.doc添加到一个数组中,那么它们都会出现,只是我不知道如何将其合并到单个文档中
文档中的字段将是动态的,因此无法按名称引用它
任何帮助都将不胜感激。不确定reduced.doc.add位是否有效 也许可以试试:
function (key, values) {
var reduced = {doc:{}, array:[]};
values.forEach(function(val){
for(var i = 0; i < val.array.length; i++)
reduced.array.push(val.array[i]);
for (kvp in val.doc){
reduced.doc[kvp]=val.doc[kvp];
}
});
return reduced;
}
函数(键、值){
var reduced={doc:{},数组:[]};
值。forEach(函数(val){
对于(var i=0;i
Duh,有一件事我没有试过。谢谢