개발/DB

🌱mongoDB:: deleteMany&이후 용량 확보+속도 향상

hyuunii 2022. 12. 3. 11:35

 

╰( ・ ᗜ ・ )╯모든 다큐먼트 삭제

join을 써야지 이런게 가능할 줄 알았는데.. 그래서 몽고db는 안될 줄 알았는데 되다니..!!!! 신기하다. 

몽고db를 너무 무시했던 것 같다,,,,,,

- 기본 문법:

db.users.deleteMany({});


users 컬렉션의 모든 도큐먼트를 삭제하는 명령.


٩(●˙▿˙●)۶ 조건에 일치하는 모든 도큐먼트 삭제

- 기본 문법: 

db.users.deleteMany({name: "나얍"});

'나얍'이라는 사용자 도큐먼트를 모두 삭제. 입력 파라미터로 조건을 붙여줄 수 있음.

 

 

- 응용 문법: 

db.users.deleteMany({age: {$gte: 27}});

age 필드가 27 이상의 도큐먼트를 모두 삭제

 

 

- 코드 사용:

 // 회원 탈퇴
  deleteUserData = async (nickName) => {
    await Comments.deleteMany({ nickName: nickName });
    await Posts.deleteMany({ nickName: nickName });
    const deleteUserData = await Users.deleteOne({ nickName: nickName });
    return deleteUserData;
  };

(;´・∀・)ゝ” deleteMany 후 용량 확보 및 속도 향상

- 설명: MongoDB는 deleteMany 시에 데이터는 삭제를 하지만 디스크 공간을 삭제한만큼 되돌려 주지 않는다. 이때 프라그먼테이션을 이용해 디스크 공간을 재할당하여 공간을 돌려 받을 수 있다.

 

- 기본 문법: 

db.runCommand({compact: "collection_name", force: false})

단 프라이머리 일 경우 위 처럼 사용할 경우 오류가 발생한다.

프라이머리일 경우에는 force: true 를 사용해야 한다.

또한 세컨더리에는 따로 명령을 내려줘야 세컨더리 디스크에도 재할당이 이뤄진다.