【发布时间】:2014-08-13 19:03:17
【问题描述】:
给定:
appliedDoses = {
"_id": "MAIN",
"scheme": {
"_id": "MAIN_SCHEME",
"name": "ESQUEMA CLASICO",
"vaccines": [
{
"_id": "BCG",
"__v": 0,
"doses": [
{
"_id": "BCG_UNICA",
"frequencies": [
{
"_id": "BCG_UNICA_RECIEN_NACIDO",
"group_type": {
"_id": "RECIEN_NACIDO",
"name": "RECIEN NACIDO"
},
"__v": 0,
"status": true,
"number_applied": 10
}, ...
我想要的是过滤group_type.id == "RECIEN_NACIDO"和doses[]._id == "BCG_UNICA"然后得到frequencies[].number_applied的总和
我试过了:
async.each(appliedDose, function(scheme){
async.each(scheme.scheme.vaccines, function(vaccine){
async.each(vaccine.doses, function(dose){
if(dose._id == getDose) {
async.each(dose.frequencies, function(frequencie){
if(frequencie.group_type._id == getGroup) {
applied += frequencie.number_applied;
}
});
}
});
});
});
但是我的代码效率不高,我想知道是否可以使用 MapReduce 来改进它。有人可以给我一个提示吗?非常感谢您的帮助!
【问题讨论】:
-
您已经用 MongoDB 标记了这个问题(并提到了 MapReduce),但正如所描述的,这似乎是一个客户端对象。您给定的对象是否意味着是一个 MongoDB 文档,而您的查询是一种连接来自多个集合的数据的方式?关于您尝试解决的问题的更多背景信息会有所帮助。
-
我将 MongoDB 更改为 mapreduce 标签,是的,我从以下代码行获得了 MongoDB 文档:AppliedDose.find() .where('clue').equals(clue) .where('applied_date') .gte( startDate ).lte( endDate ) .exec( function( err, appliedDose ) {
标签: javascript node.js mapreduce nested underscore.js