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