Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

db.collection.remove()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예시
  • WriteResult

중요

더 이상 사용되지 않는 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
문서

선택 사항.

작업에 사용할 데이터 정렬을 지정합니다.

데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.

데이터 정렬 옵션의 구문은 다음과 같습니다:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

데이터 정렬을 지정할 때 locale 필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( db.createCollection() 참조), 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다.

컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.

한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다.

버전 3.4에 새로 추가되었습니다.

문서

선택 사항입니다. .. include:: /includes/let-variables-syntax.rst .. include:: /includes/let-variables-syntax-note.rst

let 및 변수를 사용한 전체 예시는 let에서 변수 사용을 참조하세요.

버전 5.0에 추가.

remove() 메서드는 기본 쓰기 고려를 사용하는 delete 명령을 사용합니다. 다른 쓰기 고려를 지정하려면 옵션 매개변수에 쓰기 고려를 포함합니다.

기본적으로 remove()query 표현식과 일치하는 모든 문서를 제거합니다. 단일 문서만 제거하는 작업으로 제한하려면 justOne 옵션을 지정합니다. 지정된 순서대로 정렬된 단일 문서를 삭제하려면 findAndModify() 메서드를 사용합니다.

여러 문서를 제거할 때, 제거 작업은 컬렉션에 대한 다른 읽기 및/또는 쓰기 작업에 끼어들 수 있습니다.

time series 컬렉션에는 remove() 메서드를 사용할 수 없습니다.

justOne: true 옵션을 지정하는 분할된 컬렉션에 대해 remove() 작업을 사용하는 방법:

  • 하나의 샤드만 대상으로 하는 경우 쿼리 사양에서 부분 샤드 키를 사용할 수 있습니다.

  • 쿼리 사양에서 샤드 키 또는 _id 필드를 제공할 수 있습니다.

db.collection.remove()분산 트랜잭션 내에서 사용할 수 있습니다.

트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.

중요

대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.

추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.

다음은 remove() 메서드의 예입니다.

컬렉션의 모든 문서를 제거하려면 빈 쿼리 문서 {}를 사용하여 remove 메서드를 호출합니다. 다음 작업은 bios 컬렉션에서 모든 문서를 삭제합니다.

db.bios.remove( { } )

이 작업은 drop() 메서드와 동일하지 않습니다.

컬렉션에서 모든 문서를 제거하려면 drop() 메서드를 사용하여 인덱스를 포함한 전체 컬렉션을 삭제한 다음 컬렉션을 다시 만들고 인덱스를 다시 빌드하는 것이 더 효율적일 수 있습니다.

삭제 기준과 일치하는 문서를 제거하려면 <query> 매개 변수를 사용하여 remove() 메서드를 호출합니다.

다음 작업은 qty20보다 큰 컬렉션 products에서 모든 문서를 제거합니다.

db.products.remove( { qty: { $gt: 20 } } )

복제본 세트에 대한 다음 작업은 qty20보다 큰 products 컬렉션에서 모든 문서를 제거하고 wtimeout이 5000밀리초인 w: 2쓰기 고려를 지정합니다. 이 작업은 쓰기가 프라이머리와 세컨더리 모두에 전파된 후 반환거나 5초 후에 시간 초과됩니다.

db.products.remove(
{ qty: { $gt: 20 } },
{ writeConcern: { w: "majority", wtimeout: 5000 } }
)

삭제 기준과 일치하는 첫 번째 문서를 제거하려면 query 기준과 justOne 매개 변수를 true 또는 1로 설정해 remove 메서드를 호출합니다.

다음 작업은 qty20보다 큰 컬렉션 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 } }
)

버전 5.0에 추가.

명령의 다른 곳에서 액세스할 수 있는 변수를 정의하려면 let 옵션을 사용합니다.

참고

변수를 사용하여 결과를 필터링하려면 $expr 연산자 내에서 변수에 액세스해야 합니다.

컬렉션 cakeFlavors을 만듭니다:

db.cakeFlavors.insertMany( [
{ _id: 1, flavor: "chocolate" },
{ _id: 2, flavor: "strawberry" },
{ _id: 3, flavor: "cherry" }
] )

다음 예시에서는 lettargetFlavor 변수를 정의하고 이 변수를 사용하여 딸기 케이크 맛을 검색합니다.

db.cakeFlavors.remove(
{ $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
{ let : { targetFlavor: "strawberry" } }
)

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"
}
})

다음도 참조하세요.

돌아가기

db.collection.reIndex