私は MongoDB を使用しており、コレクション内の個別の「concatenated_handles」(文字列型のフィールド) の出現回数を数えたいと考えていました。
発生回数にも応じてソートする必要があったため、mapreduce を使用することにしました。すべてうまくいったのですが、突然予期しない結果が得られ始め、コードをまったく変更しませんでした。
これは私の地図です:
function() { emit(this.concatenated_handles, { count: 1}); }
これは reduce です:
r = function(key, values) { var result = {count : 0}; values.forEach(function(value) { result.count++; }); return result; }
一部のフィールドでは正しい値を返しますが、他のフィールドでは正しくありません。出力をログに記録しました。ここにあります(バグのあるフィールドのみを表示)
msdhoni#yuvstrong12:0
msdhoni#yuvstrong12:1
msdhoni#yuvstrong12:2
....
...
msdhoni#yuvstrong12:255
msdhoni#yuvstrong12:256
musclenerd#pod2g:0
musclenerd#pod2g:1
このフィールドは、他の数行の後に再びグループ化を開始します (すべての再グループ化は最後に向かっています)
justinbieber#pattiemallette:0
justinbieber#pattiemallette:1
justinbieber#pattiemallette:2
justinbieber#pattiemallette:3
justinbieber#scooterbraun:0
justinbieber#scooterbraun:1
justinbieber#scooterbraun:2
kaleycuoco#kunalnayyar:0
kaleycuoco#kunalnayyar:1
kaleycuoco#kunalnayyar:2
kaleycuoco#kunalnayyar:3
kaleycuoco#kunalnayyar:4
kaleycuoco#kunalnayyar:5
msdhoni#yuvstrong12:0
msdhoni#yuvstrong12:1
msdhoni#yuvstrong12:2
上記のすべてのフィールドは、最後に向かって再グループ化されます。それらは同じように見えますが、2 回グループ化されたため、予期しない結果になりました。そして、これはすべてのレコードで発生するわけではありません。
どこが間違っていますか?グループ フィールドは文字列です。
ありがとう!