db.collection.remove()
중요
더 이상 사용되지 않는 mongosh 메서드
이 메서드는 mongosh
에서 더 이상 사용되지 않습니다. 대체 메서드는 레거시 mongo shell과의 호환성 변경 사항을 참조하세요.
정의
db.collection.remove()
컬렉션에서 문서를 제거합니다.
반환합니다: 작업의 상태를 포함하는 WriteResult 객체입니다.
호환성
다음 환경에서 호스팅되는 배포에 db.collection.remove()
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
db.collection.remove()
메서드는 두 가지 구문 중 하나를 사용할 수 있습니다. remove()
메서드는 쿼리 문서와 선택적 justOne
부울을 사용할 수 있습니다.
db.collection.remove( <query>, <justOne> )
또는 메서드는 쿼리 문서와 선택적 제거 옵션 문서를 사용할 수 있습니다.
버전 5.0에서 변경됨
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document>, let: <document> // Added in MongoDB 5.0 } )
remove()
메서드는 다음 매개변수를 사용합니다.
Parameter | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
query | 문서 | 쿼리 연산자를 사용하여 삭제 기준을 지정합니다. 컬렉션의 모든 문서를 삭제하려면 빈 문서( {} )를 전달합니다. | ||||||||||
justOne | 부울 | 선택 사항입니다. 하나의 문서로만 삭제를 제한하려면 true 로 설정합니다. 기본값인 false 를 사용하고 삭제 기준과 일치하는 모든 문서를 삭제하려면 생략합니다. | ||||||||||
writeConcern | 문서 | 선택 사항입니다. 쓰기 고려를 표현하는 문서입니다. 기본 쓰기 고려를 사용하려면 생략합니다. 쓰기 고려를 참조하세요. 트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요. | ||||||||||
collation | 문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. 버전 3.4에 새로 추가되었습니다. | ||||||||||
문서 | 선택 사항입니다. .. include:: /includes/let-variables-syntax.rst .. include:: /includes/let-variables-syntax-note.rst
버전 5.0에 추가. |
행동
쓰기 고려
remove()
메서드는 기본 쓰기 고려를 사용하는 delete
명령을 사용합니다. 다른 쓰기 고려를 지정하려면 옵션 매개변수에 쓰기 고려를 포함합니다.
쿼리 고려 사항
기본적으로 remove()
는 query
표현식과 일치하는 모든 문서를 제거합니다. 단일 문서만 제거하는 작업으로 제한하려면 justOne
옵션을 지정합니다. 지정된 순서대로 정렬된 단일 문서를 삭제하려면 findAndModify() 메서드를 사용합니다.
여러 문서를 제거할 때, 제거 작업은 컬렉션에 대한 다른 읽기 및/또는 쓰기 작업에 끼어들 수 있습니다.
Time Series 컬렉션
time series 컬렉션에는 remove()
메서드를 사용할 수 없습니다.
샤드 컬렉션
justOne: true
옵션을 지정하는 분할된 컬렉션에 대해 remove()
작업을 사용하는 방법:
하나의 샤드만 대상으로 하는 경우 쿼리 사양에서 부분 샤드 키를 사용할 수 있습니다.
쿼리 사양에서 샤드 키 또는
_id
필드를 제공할 수 있습니다.
트랜잭션
db.collection.remove()
는 분산 트랜잭션 내에서 사용할 수 있습니다.
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
예시
다음은 remove()
메서드의 예입니다.
컬렉션에서 모든 문서 제거
컬렉션의 모든 문서를 제거하려면 빈 쿼리 문서 {}
를 사용하여 remove
메서드를 호출합니다. 다음 작업은 bios 컬렉션에서 모든 문서를 삭제합니다.
db.bios.remove( { } )
이 작업은 drop()
메서드와 동일하지 않습니다.
컬렉션에서 모든 문서를 제거하려면 drop()
메서드를 사용하여 인덱스를 포함한 전체 컬렉션을 삭제한 다음 컬렉션을 다시 만들고 인덱스를 다시 빌드하는 것이 더 효율적일 수 있습니다.
조건과 일치하는 모든 문서 제거
삭제 기준과 일치하는 문서를 제거하려면 <query>
매개 변수를 사용하여 remove()
메서드를 호출합니다.
다음 작업은 qty
가 20
보다 큰 컬렉션 products
에서 모든 문서를 제거합니다.
db.products.remove( { qty: { $gt: 20 } } )
기본 쓰기 우려 재정의
복제본 세트에 대한 다음 작업은 qty
가 20
보다 큰 products
컬렉션에서 모든 문서를 제거하고 wtimeout
이 5000밀리초인 w: 2
의 쓰기 고려를 지정합니다. 이 작업은 쓰기가 프라이머리와 세컨더리 모두에 전파된 후 반환거나 5초 후에 시간 초과됩니다.
db.products.remove( { qty: { $gt: 20 } }, { writeConcern: { w: "majority", wtimeout: 5000 } } )
조건과 일치하는 단일 문서 제거
삭제 기준과 일치하는 첫 번째 문서를 제거하려면 query
기준과 justOne
매개 변수를 true
또는 1
로 설정해 remove
메서드를 호출합니다.
다음 작업은 qty
가 20
보다 큰 컬렉션 products
에서 첫 번째 문서를 제거합니다.
db.products.remove( { qty: { $gt: 20 } }, true )
데이터 정렬 지정
버전 3.4에 새로 추가되었습니다.
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
컬렉션 myColl
에는 다음 문서가 있습니다.
{ _id: 1, category: "café", status: "A" } { _id: 2, category: "cafe", status: "a" } { _id: 3, category: "cafE", status: "a" }
다음 작업에는 데이터 정렬 옵션이 포함됩니다.
db.myColl.remove( { category: "cafe", status: "A" }, { collation: { locale: "fr", strength: 1 } } )
에서 변수 사용 let
버전 5.0에 추가.
명령의 다른 곳에서 액세스할 수 있는 변수를 정의하려면 let 옵션을 사용합니다.
참고
변수를 사용하여 결과를 필터링하려면 $expr
연산자 내에서 변수에 액세스해야 합니다.
컬렉션 cakeFlavors
을 만듭니다:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
다음 예시에서는 let
에 targetFlavor
변수를 정의하고 이 변수를 사용하여 딸기 케이크 맛을 검색합니다.
db.cakeFlavors.remove( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { let : { targetFlavor: "strawberry" } } )
WriteResult
성공적인 결과
remove()
는 작업 상태가 포함된 WriteResult()
객체를 반환합니다. 성공하면 WriteResult()
객체에는 제거된 문서 수에 대한 정보가 포함됩니다.
WriteResult({ "nRemoved" : 4 })
우려 사항 오류 쓰기
remove()
메서드에서 쓰기 고려 오류가 발생하면 결과에는 WriteResult.writeConcernError
필드가 포함됩니다.
WriteResult({ "nRemoved" : 7, "writeConcernError" : { "code" : 64, "codeName" : "WriteConcernFailed", "errmsg" : "waiting for replication timed out", "errInfo" : { "wtimeout" : true, "writeConcern" : { "w" : "majority", "wtimeout" : 1, "provenance" : "getLastErrorDefaults" } } } })
쓰기 우려와 관련이 없는 오류
remove()
메서드에서 쓰기 고려가 아닌 오류가 발생하면 결과에 WriteResult.writeError
필드가 포함됩니다.
WriteResult({ "nRemoved" : 0, "writeError" : { "code" : 2, "errmsg" : "unknown top level operator: $invalidFieldName" } })