2016-06-04 1 views
0

안녕하세요 저는 게임리스트를 반복하고 이미 게임이 삽입되어 있는지를 찾고 데이터베이스에 이미 있으면 건너 뛰고 건너 뛰고 싶습니다. 그렇지 않으면 새로운 게임을 데이터베이스에 저장합니다. 각 게임마다 새로운 게임을 삽입하기 전에 확인하고있는 고유 한 eventId가 있습니다.mongodb mongoose에있는 항목 목록을 반복하고 결과에 따라 조치를 취하십시오.

내 코드는 다음과 같습니다

for (var i=0;i < gamesList.length;i++) { 
     var game = gamesList[i]; 
     // check whether the game is already present in the DB. 
     Game.findOne({"eventId": game.ID},function(err,result){ 
     if(err){ 
      console.log(err); 
      res.json(err); 
     } 
     if(result){ 
      console.log('game is already inserted skip'); 
     } 
     else{ 
      console.log('new game available insert this into list'); 
     } 
     }); 

    } 

그러나 여기에서 주요 문제는 코드의 비동기 자연과 인 것 같아요. Game.find가 실행되면 결과가 오기를 기다리지 않고 루프의 다음 게임을 진행합니다. 목록의 마지막 게임 인 gamesList.length 시간 동안 만 콜백이 호출됩니다. 나는 게임이 데이터베이스에 이미 존재하는지 여부를 찾고 다음 결과가 목록의 다음 게임으로 가고 싶을 때 찾고 싶다. 이런 종류의 기능을 구현할 수있는 더 나은 솔루션을 게시하십시오. 동기식 코드를 사용하는 것이 차단되고 불리한 점은 무엇입니까?

답변

0

빈 개체 (Array)가 true를 반환하기 때문에 if (result.length)에 대해 if (result)을 변경하십시오.

그리고 비동기 쿼리를 실행하려면 this answer을 참조하십시오.

+0

사실 eventId 필드에 true :를 추가하여 동일한 eventId를 가진 게임을 사용할 수 있다면 db로 푸시되지 않습니다. 하지만 나쁜 습관입니다. –

관련 문제