鉴于:
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是否可以用来改进它。有人可以给我一个暗示吗?非常感谢帮助!
答案 0 :(得分:0)
我对你正在处理的对象感到有点困惑所以我会尝试处理抽象。如果你将其分解,你可能希望在这里做的更容易,更快。
通过以下方式获取过滤产生的集合:group_type._id == "RECIEN_NACIDO" && doses._id
使用_.pluck
获取number_applied的数组使用sum:_.reduce(numAppliedArray, function(sum, x) { return sum + x}, 0);