0

非常に単純な 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 以外に更新されます。

私は何を間違えましたか?

4

1 に答える 1