在 MongoDB 中插入多个数据

Insert Multiple Data in MongoDB

我正在使用 this 天气 API 收集数据并存储在 MongoDB 中。但是,我想存储多个位置的数据。到目前为止,我只能做一个。 到目前为止,我的数据在 MongoDB 中显示为 null

mongodb.MongoClient.connect('mongodb://localhost/weatherdb', function(error, database) {
    if(error != null) {
        throw error;
    };

  var t =  weather.find({search: 'Montreal, Canada', degreeType: 'F'}, function(err, result1) {
        if(err) console.log(err);


    });

  var x =  weather.find({search: 'Ottawa, Canada', degreeType: 'F'}, function(err, result2) {
        if(err) console.log(err);


    });

 var y =   weather.find({search: 'Toronto, Canada', degreeType: 'F'}, function(err, result3) {
        if(err) console.log(err);


    });
    database.collection('data').insert(
        {
            Montreal: t,
            Ottawa : x,
            Toronto : y
        },function (error, result) {
        if (error) {
            console.log("ERROR: " + error);
        }
    });

});

如果有人能告诉我如何做到这一点,我将不胜感激。

问题是您的每个查询都是异步的,但您并没有像您认为的那样将它们的结果捕获到变量中。每个查找操作的结果仅在其回调函数内可用。但是,与嵌套所有回调相比,您可以做更好的流程控制。流程控制可以通过 Promises 或 Asyncjs 库来完成,我更喜欢后者。

使用 async.map 您可以遍历您尝试进行的查询,像这样

var queries = { 't' : {search: 'Montreal, Canada', degreeType: 'F'}, 'x': {search: 'Ottowa, Canada', degreeType: 'F'}, 'y': {search: 'Toronto, Canada', degreeType: 'F'}]

async.mapValues(queries, function(query, key, cb) { weather.find(query, cb); }, function(err, results) {
  database.collection('data').insert(
        {
            Montreal: results.t,
            Ottawa : results.x,
            Toronto : result.y
        },function (error, dbResult) {
        if (error) {
            console.log("ERROR: " + error);
        }
    });
});