Вставить несколько данных в MongoDB

Я использую этот погодный API для сбора данных и их хранения в MongoDB. Тем не менее, я хотел бы хранить данные для нескольких мест. Пока что я могу сделать это только один. Пока мои данные показывают как null в моем MongoDB.

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 ответ

Решение

Проблема в том, что каждый из ваших запросов асинхронный, но вы не записываете их результаты в переменные, как вы думаете. Результаты каждой из этих операций поиска доступны только внутри функции обратного вызова. Однако вы можете лучше управлять потоком данных, чем вкладывать все обратные вызовы. Управление потоком может быть выполнено с помощью 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);
        }
    });
});
Другие вопросы по тегам