我正在使用的数据结构包含一个在MongoDB中有许多嵌入对象的对象。问题是对象可能包含2个或更多相同的嵌入对象(它们具有相同的ID)。使用map / reduce,我想获得一个聚合计数,它只在对象中计算一次嵌入对象,而不是每次出现一次。任何帮助将不胜感激。请参阅以下代码示例:
//working map function that counts every occurance of an embedded object
function(){
if(this.embeddedObjects != undefined){
this.embeddedObjects.forEach(function(e){
emit(e['_id'].toString(), 1);
});
}
}
//non-working map function for counting 1 occurance of an embedded object per object
function(){
if(this.embeddedObjects != undefined){
var embeddedIds = new Array();
this.embeddedObjects.forEach(function(e){
if(embeddedIds.join(',').indexOf(e['_id'].toString()) != -1){
embeddedIds.push(e['_id'].toString());
emit(e['_id'].toString(), 1);
}
});
}
}
// reduce function
function(key,values){
var count = 0;
values.forEach(function(v){
count += v;
});
return count;
}