안녕하세요 저는 게임리스트를 반복하고 이미 게임이 삽입되어 있는지를 찾고 데이터베이스에 이미 있으면 건너 뛰고 건너 뛰고 싶습니다. 그렇지 않으면 새로운 게임을 데이터베이스에 저장합니다. 각 게임마다 새로운 게임을 삽입하기 전에 확인하고있는 고유 한 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 시간 동안 만 콜백이 호출됩니다. 나는 게임이 데이터베이스에 이미 존재하는지 여부를 찾고 다음 결과가 목록의 다음 게임으로 가고 싶을 때 찾고 싶다. 이런 종류의 기능을 구현할 수있는 더 나은 솔루션을 게시하십시오. 동기식 코드를 사용하는 것이 차단되고 불리한 점은 무엇입니까?
사실 eventId 필드에 true :를 추가하여 동일한 eventId를 가진 게임을 사용할 수 있다면 db로 푸시되지 않습니다. 하지만 나쁜 습관입니다. –