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);
});
}
});
};
私はマングースで2つのテーブルを結合したいのですが、上記の解決策を思いつきましたが、NutrDefModelの70項目で12秒かかり、limit(30)をすると1.5秒かかります。1秒以内に改善する必要があります。私は非同期javascriptとmongooseに本当に慣れていません。このソリューションで非同期ライブラリがどのように機能するか、javascriptとmongooseでどのような代替手段があるかをほとんど理解していません。
いくつかのインデックスを追加してパフォーマンスを向上させましたが、別の問題が発生しました。上記の console.log 行は出力を生成します:
{ Ndb_No: 3198,
Nutr_No: 318,
Nutr_Val: '144',
_id: 5222665eab19d2db1800379d }nutrval: undefined
栄養オブジェクトに Nutr_Val が含まれていることがわかりますが、ニュートリエント.Nutr_Val は undefined を出力します。なんで?