mongo シェルの mongodb で map reduce を実行しようとしています。何らかの理由で、reduce フェーズで、(1 つのキーではなく) 同じキーに対して複数の呼び出しが行われるため、間違った結果が得られます。私はこの分野の専門家ではないので、愚かな間違いをしている可能性があります。どんな助けでも感謝します。
ありがとう。
これは私の小さな例です:
私は10000のドキュメントを作成しています:
var i = 0;
db.docs.drop();
while (i < 10000) {
db.docs.insert({text:"line " + i,index:i});
i++;
}
次に、モジュール 10 に基づいて map-reduce を実行しています (したがって、各「バケット」で 1000 を取得することを除いて)
db.docs.mapReduce(
function() {
emit(this.index%10,1);
},
function(key,values) {
return values.length;
},
{
out : {inline : 1}
}
);
ただし、結果として次のようになります。
{
"results" : [
{
"_id" : 0,
"value" : 21
},
{
"_id" : 1,
"value" : 21
},
{
"_id" : 2,
"value" : 21
},
{
"_id" : 3,
"value" : 21
},
{
"_id" : 4,
"value" : 21
},
{
"_id" : 5,
"value" : 21
},
{
"_id" : 6,
"value" : 21
},
{
"_id" : 7,
"value" : 21
},
{
"_id" : 8,
"value" : 21
},
{
"_id" : 9,
"value" : 21
}
],
"timeMillis" : 76,
"counts" : {
"input" : 10000,
"emit" : 10000,
"reduce" : 500,
"output" : 10
},
"ok" : 1,
}