в моей исходной базе данных есть документы, такие как ..
{date:14, month:1, year:2011, name:"abc", item:"A"}
{date:14, month:1, year:2011, name:"abc", item:"B"}
{date:14, month:1, year:2011, name:"def", item:"A"}
{date:14, month:1, year:2011, name:"def", item:"B"}
{date:15, month:1, year:2011, name:"abc", item:"A"}
{date:16, month:1, year:2011, name:"abc", item:"A"}
{date:15, month:1, year:2011, name:"def", item:"A"}
{date:16, month:1, year:2011, name:"def", item:"A"}
, а моя карта редуцирования похожа на ...
var m = function(){
emit({name:this.name, date:this.date, month:this.month, year:this.year}, {count:1})
}
var r = function(key, values) {
var total_count = 0;
values.forEach(function(doc) {
total_count += doc.count;
});
return {count:total_count};
};
var res = db.source.mapReduce(m, r, { out : { "merge" : "bb_import_trend" } } );
, поэтому коллекция "myoutput" будет иметь такое же число ....
{ "_id" : { date : 14,
month : 1,
year : 2011,
name : "abc"
},
"_value" : { "count" : 2 }
},
{ "_id" : { date : 14,
month : 1,
year : 2011,
name : "def"
},
"_value" : { "count" : 2 }
},
{ "_id" : { date : 15,
month : 1,
year : 2011,
name : "abc"
},
"_value" : { "count" : 1 }
},
{ "_id" : { date : 15,
month : 1,
year : 2011,
name : "def"
},
"_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
month : 1,
year : 2011,
name : "abc"
},
"_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
month : 1,
year : 2011,
name : "def"
},
"_value" : { "count" : 1 }
}
итого 6 документов
, поэтому, когда в мою исходную коллекцию было добавлено еще три документа с датой 17, например ...
{date:17, month:1, year:2011, name:"abc", item:"A"}
{date:17, month:1, year:2011, name:"abc", item:"B"}
{date:17, month:1, year:2011, name:"def", item:"A"}
.... и снова я запускаю карту - уменьшите, это должно быть просто добавление двух документов, таких как ...
предыдущие 6 плюс
...
{ "_id" : { date : 17,
month : 1,
year : 2011,
name : "abc"
},
"_value" : { "count" : 2 }
},
{ "_id" : { date : 17,
month : 1,
year : 2011,
name : "def"
},
"_value" : { "count" : 1 }
}
, но вместо этого он дублирует все предыдущие 6документы и добавляет еще 2 новых ... всего 14 документов в моей выходной коллекции (хотя я использовал слияние в выходной).
Примечание>: когда я использую другую базу данных с той же исходной коллекцией и делаюта же самая процедура дает мне желаемый результат (всего из 8 коллекций). Но моя база данных, используемая моим графическим интерфейсом, все еще дублирует старые.