node.js - 如何将变量传递到 mongodb 回调中?

标签 node.js node-mongodb-native

我正在尝试从 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/

相关文章:

node.js - npm 错误!错误 : connect ECONNREFUSED when trying to update the npm

node.js - 寻找更新 AWS 凭证的更好方法

node.js - MongoDB nodejs 驱动程序返回的行数不超过 100000 行

node.js - 获取 MongoDB 字段中具有最小值或最大值的文档

node.js - Node.js 中的括号

node.js - Node 做出什么事件顺序保证?

node.js - 使用 AWS CDK 为 lambda 指定自定义角色

javascript - 无法将参数传递给 mongo find 集合

node.js - Nodejs mongoClient.connect 由于 mongo 中的用户名/密码设置而失败

node.js - 副本集故障转移后无法自动重新连接到新的 PRIMARY,来自 Mongoose(MongoDB、NodeJS 驱动程序)