我正在尝试从 mongodb 中为两个字段选择不同的值。使用 async.series,我有以下内容:
function getSettings(target){
var versions = [];
var result = {};
function putResults(key, val){
result[key] = val;
}
async.series(
[
function(callback){
db.get(target).distinct('version', function(err, arr){
if(err) return err;
versions = arr;
callback();
}); //end db call
},
function(callback){
var items;
for(var i = 0; i<versions.length; i++)
{
db.get(target).distinct('instance', {version: versions[i]}, function(err, arr){
items = arr;
putResults(versions[i], items);
}); //end db call
}
}
],
function(err){
if(err) return err;
console.log(result);
}); //end async
}
使用此代码,我在 putResults(versions[i], items) 上收到“未定义”异常。我知道这是因为版本超出了范围。我的问题是:如何将其纳入范围?
预期结果:
result = {1: [1, 2, 3], 2: [1, 2, 3, 4]}
最佳答案
在我们的例子中最好使用 waterfall而不是系列
,以及 map ,像这样
function getSettings(target){
async.waterfall([
function (callback) {
db.get(target).distinct('version', function (err, versions) {
callback(err, versions);
});
},
function (versions, callback) {
async.map(versions, function (version, next) {
db.get(target).distinct('instance', {version: version}, function (err, items) {
var result = {};
result[version] = items;
next(err, result);
});
}, function (err, res) {
callback(err, res);
});
}
], function (err, result) {
if (err) {
return;
}
console.log(result);
});
}
关于node.js - 如何将变量传递到 mongodb 回调中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223439/