在MongoDB中插入多个数据

时间:2017-01-30 02:05:07

标签: javascript mongodb weather-api

我正在使用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);
        }
    });

});

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

1 个答案:

答案 0 :(得分:0)

问题在于您的每个查询都是异步的,但您并没有像您认为的那样将结果捕获到变量中。每个查找操作的结果仅在其回调函数中可用。但是,您可以比嵌套所有回调更好地进行流控制。可以使用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);
        }
    });
});