我在使用非常简单的 mapreduce 时遇到了一些麻烦,我不知道我做错了什么。我正在尝试将两个集合合并在一起,首先,db.Pos 看起来像这样
"chr" : "chr1", "begin" : 39401, "end" : 39442
另一个集合 db.Gene 具有以下格式
"chr" : "chr1", "begin" : 39401, "end" : 39442, "gene" : "GENE1"
我的代码如下所示:
var mapPos = function(){
emit({chr: this.chr, begin:this.begin, end:this.end},{gene:""});
}
var mapGene = function() {
emit({chr: this.chr, begin:this.begin, end:this.end},{gene:this.gene});
}
r = function(key,values){
var result = {gene:""}
values.forEach(function(value){
result.gene = value.gene;
});
return result;
}
res = db.Pos.mapReduce(mapPos, r, {out: {reduce: 'joined'}});
res = db.Gene.mapReduce(mapGene, r, {out: {reduce: 'joined'}});
所以我想看到的是一个集合,其中与 chr、begin 和 end 匹配的条目被合并,并且基因字段是从 db.Gene 集合中填充的。
相反,即使 db.Gene 中没有具有基因字段的匹配文档,我的“已加入”集合中的“基因”字段也会更新为 0 以外的值。
我做错了什么?