본문 바로가기
데이터베이스/MongoDB

[MongoDB] Delete관련, 차이점

by minhyeok.lee 2023. 3. 1.
반응형

db.collection.(drop() vs deleteMany() vs deleteOne() vs findOneAndDelete())

Delete관련

MongoDB, db.collection.remove(): 지원중지, db.collection.deleteOne(), db.collection.deleteMany(), db.collection.findOneAndDelete()

 

db.collection.deleteOne()

1. 필터와 일치하는 첫 번째 문서를 삭제한다.

2. 정확한 삭제를 위해 _id와 같은 고유 인덱스의 일부인 필드를 사용해야한다.

3. "deleteCount"는 1로 고정이다.

 

반환 값(retun 값) 예시

{ "acknowledged" : true, "deletedCount" : 1 }

 - "acknowledge"는 모든것이 잘 동작했는지에 대한 부울타입의 값이다.


db.collection.deleteMany()

1. 필터와 일치하는 여러 문서를 삭제한다.

2. db.collection.deleteMany()은 문서를 한 번에 하나씩(직렬 수행) 삭제한다.

3. 기본 노드가 실패하는 경우 db.collection.deleteMany() 작업에서 보조 노드에서 아직 삭제되지 않은 문서는 컬렉션에서 삭제되지 않는다.

 

반환 값(retun 값) 예시

{ "acknowledged" : true, "deletedCount" : 8 }

 

 

db.collection.findOneAndDelete()

1. 컬렉션에서 필터와 일치하는 첫 번째 일치 문서를 삭제한다

2. 정렬 매개변수를 사용하면 일치하는 문서의 순서가 달라져 삭제할 문서에 영향을 줄 수 있다.

 

반환 값(retun 값) 예시

{ _id: 123, name: "홍길동", title: "홍길동전"}

 

 

deleteMany() vs deleteOne()

다수의 문서를 삭제할 때는 db.collection.deleteMany()을 사용한다.

단일문서를 삭제할 때는 db.collection.deleteOne()을 대신 사용한다

 

 

deleteMany() vs db.collection.drop()

deleteMany()같은 경우 시계열 컬렉션에 사용되면 WriteError 예외가 발생한다.

시계열 컬렉션에서 모든 문서를 제거하려면 (db.collection.drop(): 컬렉션과 해당 문서 전부 제거)를 사용한다.

 * 시계열 컬렉션: 일정 기간 동안의 측정 시퀀스를 효율적으로 저장하는 컬렉션이다. (주식, 날씨 정보 등)

 

 

deleteOne() vs findOneAndDelete()

findOneAndDelete()는 필터 및 정렬 기준에 따라 컬렉션에서 단일 문서를 삭제하고 삭제된 문서를 반환한다.

deleteOne()은 컬렉션에서 필터와 일치하는 첫 번째 문서를 삭제고 삭제 결과(성공여부, 갯수)를 반환한다.

공통점: 하나의 문서를 찾아 삭제하는 것은 동일하다.

차이점

1. 반환 값(return 되는 값)이 다르다.

2. deleteOne()의 사용 사례는 문서가 필요하지 않고 약간의 시간과 자원(대역폭)을 절약하려는 경우이다.

3. findOneAndDelete()의 사용 사례는 삭제된 문서에 대한 정보가 필요한 경우이다.

반응형

댓글