문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
db.collection.deleteMany()
정의
db.collection.deleteMany()
중요
Mongo쉬 방법
이 페이지에서는
mongosh
메서드를 설명합니다. 이는 데이터베이스 명령이나 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다 .데이터베이스 명령에 대해서는
delete
명령을 참조하십시오.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
레거시
mongo
셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.컬렉션에서
filter
와(과) 일치하는 문서를 모두 제거합니다.반환합니다: 다음이 포함된 문서입니다. 쓰기 고려로 작업이 실행된 경우 부울
acknowledged
을true
로, 쓰기 고려가 비활성화된 경우 부울을false
로 설정합니다.deletedCount
삭제된 문서 수 포함
호환성
다음 환경에서 호스팅되는 배포에 db.collection.deleteMany()
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
deleteMany()
메서드의 구문은 다음과 같습니다.
db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document> } )
매개변수 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
문서 | 쿼리 연산자를 사용하여 삭제 기준을 지정합니다. collection의 모든 문서를 삭제하려면 빈 문서( | |||||||||||
문서 | 선택 사항입니다. 쓰기 고려를 표현하는 문서입니다. 기본 쓰기 고려를 사용하지 않으려면 생략하세요. 트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요. | |||||||||||
문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. | |||||||||||
문서 | 선택 사항. 쿼리 조건자를 지원하는 데 사용할 인덱스를 지정하는 문서 또는 문자열입니다. 이 옵션은 인덱스 사양 문서 또는 인덱스 이름 문자열을 사용할 수 있습니다. 존재하지 않는 인덱스를 지정하면 연산 오류가 발생합니다. |
행동
Time Series 컬렉션
db.collection.deleteMany()
을(를) time series 컬렉션 에 사용하면 WriteError
예외가 발생합니다. time series 컬렉션에서 모든 문서를 제거하려면 db.collection.drop()
를 사용합니다.
단일 문서 삭제
단일 문서를 삭제하려면 대신 db.collection.deleteOne()
을 사용하세요.
또는 고유 인덱스의 일부인 필드를 사용합니다(예: _id
).
트랜잭션
db.collection.deleteMany()
는 분산 트랜잭션 내에서 사용할 수 있습니다.
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
프라이머리 노드 장애
db.collection.deleteMany()
은 문서를 한 번에 하나씩 삭제합니다. db.collection.deleteMany()
작업 중에 프라이머리 노드가 실패하면 세컨더리 노드에서 아직 삭제되지 않은 문서는 컬렉션에서 삭제되지 않습니다.
oplog 항목
db.collection.deleteMany()
작업이 하나 이상의 문서를 성공적으로 삭제하면 삭제된 각 문서에 대한 항목이 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." } )
다음 작업은 client : "Crude Traders
Inc."
가 있는 모든 문서를 삭제합니다:
try { db.orders.deleteMany( { "client" : "Crude Traders Inc." } ); } catch (e) { print (e); }
이 연산은 다음을 반환합니다.
{ "acknowledged" : true, "deletedCount" : 10 }
다음 작업은 stock : "Brent Crude
Futures"
및 limit
가 48.88
보다 큰 모든 문서를 삭제합니다.
try { db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } ); } catch (e) { print (e); }
이 연산은 다음을 반환합니다.
{ "acknowledged" : true, "deletedCount" : 8 }
쓰기 고려를 포함하는 deleteMany()
3명으로 구성된 멤버 복제본 세트가 있는 경우 다음 작업은 majority
의 w
및 100
의 wtimeout
을 지정합니다.
try { db.orders.deleteMany( { "client" : "Crude Traders Inc." }, { writeConcern: { 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
에는 다음 문서가 있습니다.
db.restaurants.insertMany( [ { _id: 1, category: "café", status: "A" }, { _id: 2, category: "cafe", status: "a" }, { _id: 3, category: "cafE", status: "a" } ] )
다음 작업에는 데이터 정렬 옵션이 포함됩니다.
db.restaurants.deleteMany( { category: "cafe", status: "A" }, { collation: { locale: "fr", strength: 1 } } )
삭제 작업에 hint
지정
mongosh
에서 다음 문서로 members
컬렉션을 만듭니다.
db.members.insertMany([ { "_id" : 1, "member" : "abc123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }, { "_id" : 3, "member" : "lmn123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 4, "member" : "pqr123", "status" : "D", "points" : 20, "misc1" : "Deactivated", "misc2" : null }, { "_id" : 5, "member" : "ijk123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 6, "member" : "cde123", "status" : "A", "points" : 86, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" } ])
컬렉션에 다음 인덱스를 만듭니다.
db.members.createIndex( { status: 1 } ) db.members.createIndex( { points: 1 } )
다음 업데이트 작업은 인덱스 { status: 1 }
을(를) 사용하도록 명시적으로 암시합니다.
db.members.deleteMany( { "points": { $lte: 20 }, "status": "P" }, { hint: { status: 1 } } )
참고
존재하지 않는 인덱스를 지정하면 연산 오류가 발생합니다.
삭제 명령은 다음을 반환합니다.
{ "acknowledged" : true, "deletedCount" : 3 }
사용된 인덱스를 보려면 $indexStats
파이프라인을 사용할 수 있습니다.
db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
$indexStats
출력의 accesses.ops
필드는 인덱스를 사용한 작업의 수를 나타냅니다.