私の Rails+MongoId アプリケーションでは、統計目的でデータを集計する必要があります。私のモデルは、多くのバージョン (別名: バンドル) と相対的なユーザー アクティベーションを持つ一般的な Web アプリケーションを表現しています。
App = {
"_id" : ObjectId("4ff2e2eab528571384000eb4"),
"name" : "my app",
"category_id": "4ff2e2eab528571384000cc0",
"bundles": [{
"_id" : ObjectId("4ff2e2eab528571384000dca"),
"activations" : [{
"user" : "user_0",
"_id" : ObjectId("4ff2e2eab528571384000dd0")
},
...
},
...
]
}
今、私がしなければならないことは、アプリケーション CATEGORY_ID ごとの ACTIVATIONS の数を返すことです。
results = [
{
"_id": "4ff2e2eab528571384000cc0",
"value": 243
},
...
]
この mapreduce 関数を使用して、CATEGORY_ID ごとの BUNDLES の総数を簡単に取得できます。
map = function() {
for (var bundle in this.bundles) {
emit(this.category_id, 1);
}
};
reduce = function(key, values) {
var sum = 0;
values.forEach(function(value) {
sum += value;
});
return sum;
};
しかし、1 レベル深く入力しようとすると、まったく結果が得られません。
map = function() {
for (var bundle in this.bundles) {
for (var activation in bundle.activations) {
emit(this.category_id, 1);
}
}
};
reduce = function(key, values) {
var sum = 0;
values.forEach(function(value) {
sum += value;
});
return sum;
};
どんなアイデアでも大歓迎です。よろしくお願いします
マイク・コスタ