map/reduceの動作を理解しようとしています。
マップ関数は次のとおりです。
function() {
var klass = this.error_class;
emit('klass', { model : klass, count : 1 });
}
そしてreduce機能:
function(key, values) {
var results = { count : 0, klass: { foo: 'bar' } };
values.forEach(function(value) {
results.count += value.count;
results.klass[value.model] = 0;
printjson(results);
});
return results;
}
それから私はそれを実行します:
{
"count" : 85,
"klass" : {
"foo" : "bar",
"Twitter::Error::BadRequest" : 0
}
}
{
"count" : 86,
"klass" : {
"foo" : "bar",
"Twitter::Error::BadRequest" : 0,
"Stream:DirectMessage" : 0
}
}
この時点では、すべてが良好ですが、100ドキュメントごとに読み取りロックが生成されます。
{
"count" : 100,
"klass" : {
"foo" : "bar",
"Twitter::Error::BadRequest" : 0,
"Stream:DirectMessage" : 0
}
}
{ "count" : 100, "klass" : { "foo" : "bar", "undefined" : 0 } }
キーを保持foo
し、count
属性を増やし続けました。問題は、他のすべてがになったことですundefined
。
count
では、属性がまだ良好であるのに、なぜオブジェクトの動的キーが失われるのでしょうか。