私が扱っているデータ構造は、MongoDB に多くのオブジェクトが埋め込まれたオブジェクトで構成されています。問題は、オブジェクトに 2 つ以上の同じ埋め込みオブジェクトが含まれている可能性があることです (それらは同じ ID を持っています)。map/reduce を使用して、埋め込みオブジェクトを 1 回の出現ごとではなく、オブジェクト内で 1 回だけカウントする集計カウントを取得したいと考えています。どんな助けでも大歓迎です。以下のコード サンプルを参照してください。
//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;
}