정의
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스 
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.
- MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전 
- MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전 
구문
deleteOne() 메서드의 형식은 다음과 같습니다.
db.collection.deleteOne(     <filter>,     {       writeConcern: <document>,       collation: <document>,       hint: <document|string>     } ) 
deleteOne() 메서드는 다음 매개변수를 사용합니다.
| Parameter | 유형 | 설명 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 문서 | 쿼리 연산자를 사용하여 삭제 기준을 지정합니다. 컬렉션에서 반환된 첫 번째 문서를 삭제하려면 빈 문서  | |||||||||||
| 문서 | 선택 사항입니다. 쓰기 고려를 표현하는 문서입니다. 기본 쓰기 고려를 사용하지 않으려면 생략하세요. 트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요. | |||||||||||
| 문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다: 데이터 정렬을 지정할 때  데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우(  컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. | |||||||||||
| 문서 | 선택 사항. 쿼리 조건자를 지원 데 사용할 인덱스지정하는 문서 또는 문자열입니다. 이 옵션은 인덱스 사양 문서 또는 인덱스 이름 문자열을 사용할 수 있습니다. 존재하지 않는 인덱스를 지정하면 연산 오류가 발생합니다. | 
행동
삭제 순서
db.collection.deleteOne()(은)는 필터와 일치하는 첫 번째 문서를 삭제합니다. 정확한 삭제를 위해 _id(과)와 같은 고유 인덱스의 일부인 필드를 사용합니다.
Time Series 컬렉션
db.collection.deleteOne() 은 time series 컬렉션에 사용되는 경우 WriteError 예외를 반환합니다.
샤드 컬렉션
샤딩된 컬렉션에서 db.collection.deleteOne()을 사용하려면 다음을 수행합니다.
- 하나의 샤드만 대상으로 하는 경우 쿼리 사양에서 부분 샤드 키를 사용할 수 있습니다. 
- 쿼리 사양에서 샤드 키 또는 - _id필드를 제공할 수 있습니다.
트랜잭션
db.collection.deleteOne()는 분산 트랜잭션 내에서 사용할 수 있습니다.
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
oplog 항목
db.collection.deleteOne() 작업이 문서를 성공적으로 삭제하면 이 작업은 oplog에 항목을 추가합니다. 이 작업이 실패하거나 삭제할 문서를 찾지 못하면 oplog에 항목을 추가하지 않습니다.
예시
단일 문서 삭제
orders 컬렉션에는 다음과 같은 구조의 문서가 있습니다.
db.orders.insertOne(    {       _id: ObjectId("563237a41a4d68582c2509da"),       stock: "Brent Crude Futures",       qty: 250,       type: "buy-limit",       limit: 48.90,       creationts: ISODate("2015-11-01T12:30:15Z"),       expiryts: ISODate("2015-11-01T12:35:15Z"),       client: "Crude Traders Inc."    } ) 
다음 작업은 _id:
ObjectId("563237a41a4d68582c2509da")로 순서를 삭제합니다.
try {    db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") } ); } catch (e) {    print(e); } 
이 연산은 다음을 반환합니다.
{ acknowledged: true, deletedCount: 1 } 
다음 연산은 expiryts가 ISODate("2015-11-01T12:40:15Z")보다 큰 첫 번째 문서를 삭제합니다.
try {    db.orders.deleteOne( { expiryts: { $lt: ISODate("2015-11-01T12:40:15Z") } } ); } catch (e) {    print(e); } 
이 연산은 다음을 반환합니다.
{ acknowledged: true, deletedCount: 1 } 
쓰기 고려를 포함하는 deleteOne()
3명으로 구성된 멤버 복제본 세트가 있는 경우 다음 작업은 majority의 w 및 100의 wtimeout 을 지정합니다.
try {    db.orders.deleteOne(        { _id: ObjectId("563237a41a4d68582c2509da") },        { w: "majority", wtimeout: 100 }    ); } catch (e) {    print (e); } 
승인이 wtimeout 제한보다 오래 걸리면 다음 예외가 발생합니다.
WriteConcernError({    code: 64,    errmsg: "waiting for replication timed out",    errInfo: {      wtimeout: true,      writeConcern: {        w: "majority",        wtimeout: 100,        provenance: "getLastErrorDefaults"      }    } }) 
데이터 정렬 지정
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
다음 문서가 포함된 restaurants collection입니다:
db.restaurants.insertMany( [    { _id: 1, category: "café", status: "Open" },    { _id: 2, category: "cafe", status: "open" },    { _id: 3, category: "cafE", status: "open" } ] ) 
다음 작업에는 데이터 정렬 옵션이 포함됩니다.
db.restaurants.deleteOne(    { category: "cafe", status: "Open" },    { collation: { locale: "fr", strength: 1 } } ) 
삭제 필터하다 strength: 1로 데이터 정렬을 지정하며, 이는 데이터 정렬이 대소문자 변형과 문자 변형 간의 차이를 무시한다는 의미입니다. 따라서 필터하다 에 지정된 대소문자 및 문자 변형과 정확히 일치하는 문서 없더라도 작업은 여전히 문서 일치시키고 삭제합니다.
삭제 작업에 hint 지정
mongosh에서 다음 문서를 사용하여 students 컬렉션을 생성하세요.
db.members.insertMany( [    { _id: 1, student: "Richard", grade: "F", points: 0 },    { _id: 2, student: "Jane", grade: "A", points: 60 },    { _id: 3, student: "Adam", grade: "F", points:  0 },    { _id: 4, student: "Ronan", grade: "D", points: 20 },    { _id: 5, student: "Noah", grade: "F", points:  0 },    { _id: 6, student: "Henry", grade: "A", points: 86 } ] ) 
컬렉션에 다음 인덱스를 만듭니다:
db.members.createIndex( { grade: 1 } ) 
다음 업데이트 작업은 인덱스 { grade: 1 }을(를) 사용하도록 명시적으로 암시합니다.
db.members.deleteOne(    { points: { $lte: 20 }, grade: "F" },    { hint: { grade: 1 } } ) 
참고
존재하지 않는 인덱스를 지정하면 연산 오류가 발생합니다.
삭제 명령은 다음을 반환합니다.
{ acknowledged: true, deletedCount: 1 } 
사용된 인덱스를 보려면 $indexStats 파이프라인을 사용할 수 있습니다.
db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] ) 
$indexStats 출력의 accesses.ops 필드는 인덱스를 사용한 작업의 수를 나타냅니다.
팁
여러 문서를 삭제하려면 다음을 참조하세요.
db.collection.deleteMany()