我正在使用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);
}
});
});
如果有人能告诉我如何做到这一点,我将不胜感激。
答案 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);
}
});
});