我试图理解 map/reduce 的行为。
这是地图功能:
function() {
var klass = this.error_class;
emit('klass', { model : klass, count : 1 });
}
和减少功能:
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
属性仍然很好的情况下丢失了对象的动态键呢?