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

db.collection.deleteMany()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예시
db.collection.deleteMany()

드라이버가 포함된 MongoDB

이 페이지에서는 mongosh 메서드에 대해 설명합니다. MongoDB 드라이버에서 동일한 메서드를 보려면 해당 프로그래밍 언어의 해당 페이지를 참조하세요.

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala

컬렉션에서 filter와(과) 일치하는 문서를 모두 제거합니다.

반환합니다:다음이 포함된 문서입니다.
  • 작업이 쓰기 고려로 실행된 경우 부울 acknowledgedtrue로, 쓰기 고려가 비활성화된 경우 false로 설정합니다.

  • deletedCount 삭제된 문서 수 포함

참고

대규모 컬렉션에서 모든 문서를 삭제하는 경우 컬렉션을 삭제하고 다시 만드는 것이 더 빠를 수 있습니다. 컬렉션을 삭제하기 전에 컬렉션의 모든 인덱스를 확인합니다. 원본 컬렉션에 존재했던 모든 인덱스를 다시 만들어야 합니다. 원본 컬렉션이 샤딩된 경우 다시 만든 컬렉션도 샤딩해야 합니다.

컬렉션 삭제에 대한 자세한 내용은 db.collection.drop()을 참조하세요.

이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.

deleteMany() 메서드의 구문은 다음과 같습니다.

db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
Parameter
유형
설명
문서

쿼리 연산자를 사용하여 삭제 기준을 지정합니다.

collection의 모든 문서를 삭제하려면 빈 문서({ })를 전달합니다.

문서

선택 사항입니다. 쓰기 고려를 표현하는 문서입니다. 기본 쓰기 고려를 사용하지 않으려면 생략하세요.

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

문서

선택 사항.

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

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

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

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

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

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

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

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

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

문서

선택 사항. 쿼리 조건자를 지원하는 데 사용할 인덱스를 지정하는 문서 또는 문자열.

이 옵션은 인덱스 사양 문서 또는 인덱스 이름 문자열을 사용할 수 있습니다.

존재하지 않는 인덱스를 지정하면 연산 오류가 발생합니다.

예시를 보려면 삭제 작업에 hint 지정을 참조하세요.

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() 작업 중에 프라이머리 노드가 실패하면 세컨더리 노드에서 아직 삭제되지 않은 문서는 컬렉션에서 삭제되지 않습니다.

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"limit48.88보다 큰 모든 문서를 삭제합니다.

try {
db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );
} catch (e) {
print (e);
}

이 연산은 다음을 반환합니다.

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

3명으로 구성된 멤버 복제본 세트가 있는 경우 다음 작업은 majorityw100wtimeout을 지정합니다.

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

다음도 참조하세요.

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

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

컬렉션 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 } }
)

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 필드는 인덱스를 사용한 작업의 수를 나타냅니다.

돌아가기

db.collection.dataSize

이 페이지의 내용