var asynclib = require('async');
exports.apiFindNutrients = function(req, res) {
var ndb = req.params.ndb;
NutrDefModel.find().limit(30).exec(function(error, nutref) {
asynclib.mapSeries(nutref, function(ref, callback) {
NutrModel.find({ Nutr_No: ref.Nutr_No, Ndb_No: ndb }, function(error, nutrient) {
console.log(nutrient + 'nutrval: ' + nutrient.Nutr_Val);
var result = {
Ndb_No: nutrient.Ndb_No,
Nutr_No: ref.Nutr_No,
Units: ref.Units,
Tagname: ref.Tagname,
Nutr_Desc: ref.Nutr_Desc,
Nutr_Val: nutrient.Nutr_Val
};
callback(null, result);
}
});
}, function (err, result) {
if (err)
console.log('async lib ' + err);
res.send(result);
});
}
});
};
몽구스 자바 스크립트와 비동기로 참여, 나는 위의 솔루션을 함께했다하지만 내가 제한을 수행 할 때 (30)이 소요 NutrDefModel 70 개 항목 12 초 정도 걸립니다 1.5 초. 1 초 미만으로 개선해야합니다. 저는 비동기 자바 스크립트와 몽구스를 처음 접했을뿐입니다.이 솔루션에서 비동기 라이브러리가 어떻게 작동하는지 간략하게 이해할 수 있습니다. 자바 스크립트와 몽구스로 교훈을 얻으려면 어떻게해야할까요?성능 표가 나는 몽구스 두 개의 테이블을 조인 할
몇 가지 색인을 추가하여 성능을 향상 시켰지만 이제는 또 다른 문제가 있습니다. CONSOLE.LOG 라인이 출력을 생성 위 :
{ Ndb_No: 3198,
Nutr_No: 318,
Nutr_Val: '144',
_id: 5222665eab19d2db1800379d }nutrval: undefined
당신이 영양 개체를 볼 수는 Nutr_Val하지만 nutrient.Nutr_Val 인쇄 정의가 포함되어 있습니다. 왜?
이 효율적으로 지원하지 않기 때문에 당신이 MongoDB를 함께 테이블에 참여해야하는 경우가 가난하여 스키마를 설계 한
또는. 디자인을 재고해야합니다. – WiredPrairie
일부 인덱스를 추가했는데 더 빨리 작동하지만 다른 문제가 있습니다. 위의 편집을 참조하십시오. –
필드 이름의 철자가 다릅니다. 정확해야합니다. 케이스 문제. – WiredPrairie