2017-01-30 2 views
0

나는 날씨 데이터를 수집하고 MongoDB에 this 날씨 정보를 사용하고 있습니다. 그러나 여러 위치에 대한 데이터를 저장하고 싶습니다. 지금까지 단 하나만 할 수 있습니다. 지금까지 내 데이터는 내 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); 
     } 
    }); 

}); 

누군가가 내게이 작업을 수행 할 수 있다면 감사하게 생각합니다.

답변

0

문제는 각각의 쿼리가 비동기 적이지만 자신이 생각하는 것처럼 변수에 결과를 캡처하지 않는다는 것입니다. 각 find 연산의 결과는 콜백 함수 내에서만 사용할 수 있습니다. 그러나 모든 콜백을 중첩하는 것보다 더 나은 흐름 제어를 할 수 있습니다. 흐름 제어는 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); 
     } 
    }); 
}); 
+0

당신을 순전히 감사처럼, 당신이 만들려고 노력하고있는 쿼리를 통해 뭔가를 반복 할 수 있습니다! – Ekom