非常に単純な mapreduce で問題が発生しています。何が間違っていたのかわかりません。2 つのコレクションをマージしようとしていますが、最初の db.Pos は次のようになります。
"chr" : "chr1", "begin" : 39401, "end" : 39442
もう 1 つのコレクション 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 以外に更新されます。
私は何を間違えましたか?