对于我的 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;
};
但是,当我尝试更深入地进入一个级别时,我确实没有得到任何结果:
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;
};
非常感谢任何想法。此致
迈克·科斯塔