본문 바로가기
Project/축구모임 홈페이지개발

[축구모임 홈페이지개발] 02/26 개발일지 Nodejs MongoDB collection 삭제

by 한33 2024. 2. 26.

승부차기 점수가 매 달 초기화가 되어야하는데, 

mongoDB 의 gamezone_shooting 이름의 collection 안에 점수들이 다 저장되어있기 때문에

통째로 그 collection 을 삭제하면 점수가 초기화가 되었다.

 

그래서 알아보니,

  const collectionName = 'gamezone_shooting'

  await db.dropCollection(collectionName);

 

위와 같은 방법으로 collection 이름을 지정한다음 삭제해주면 되었다.

 

근데 문제가 하나 발생했다.

 

점수 순서대로 출력하기 위해서 승부차기 탭에서

 

                const shootingScoreArray = Object.entries(ShootingScore);
                shootingScoreArray.sort((a, b) => b[1].top_score - a[1].top_score);
                for (let i = 0; i < shootingScoreArray.length; i++) {
                %>
                  <div class="MvpBoard-area">
                    <div class="MvpBoard-area-rank">
                      <%= i + 1 %>
                    </div>
                    <div class="MvpBoard-area-name">
                      <%= shootingScoreArray[i][1].name %>
                    </div>
                    <div class="MvpBoard-area-rank">
                      <%= shootingScoreArray[i][1].top_score %>
                    </div>
                  </div>
                <% } %>

 

위와 같이 코드를 썼었다.

 

그러다보니 점수를 초기화 시키면 ShootingScore 의 데이터가 없어서 

위 코드에서 정의내리지 않은 변수값이 있다는 오류가 떴다.

 

그래서 변수가 있는 경우에만 해당 코드를 실행시키기 위해서 위 코드를 if 문 안에 넣었다.

 

                <%
                if (typeof ShootingScore !=='undefined' ) {
                const shootingScoreArray = Object.entries(ShootingScore);
                shootingScoreArray.sort((a, b) => b[1].top_score - a[1].top_score);
                for (let i = 0; i < shootingScoreArray.length; i++) {
                %>
                  <div class="MvpBoard-area">
                    <div class="MvpBoard-area-rank">
                      <%= i + 1 %>
                    </div>
                    <div class="MvpBoard-area-name">
                      <%= shootingScoreArray[i][1].name %>
                    </div>
                    <div class="MvpBoard-area-rank">
                      <%= shootingScoreArray[i][1].top_score %>
                    </div>
                  </div>
                <% } %>
                <% } %>

 

그렇게하니

 

MongoServerError: ns not found

 

의 에러문이 나왔는데,

이는 collection 이 없어서 나오는 에러라고 한다.

 

어떤 방법이 있을지 고민하다가

삭제를 시킨 후에 다시 삭제한 같은 명의 collection 을 생성하자는 생각을 했다.

근데 또 생각해보니 그러면 분명히 collection 은 유지시키면서 안에 있는 데이터를 밀어버리는 코드가 있지 않을까?

해서 알아보니,

  const collection =  db.collection(collectionName);
  await collection.deleteMany({});

 

위와 같이 코드를 짜주면 되었다.

 


 

승부차기 탭에서 신기록을 갱신을 하면 자동으로 점수판으로 돌아가는 코드를 짜놨었는데, 좀 더 친절하게 

 

                    if (currentScore > data.top_score) {
                        alert('신기록갱신!')
                        location.href = `/gamezone-shooting-scoreboard?score=${encodeURIComponent(currentScore)}`;
                    }
                })
                .catch(error => console.error('Error checking top_score:', error));

 

먼저 alert 로 신기록갱신을 알려주고 그 이후에 데이터를 전달시켰다.