컬렉션 잘라내기
MongoDB 컬렉션은 어떻게 잘라내거나 그런 게 있나요?
지금 당장 6개의 큰 컬렉션을 한꺼번에 삭제해야 하며, 서버를 중지하고 데이터베이스 파일을 삭제한 후 데이터베이스와 그 안에 있는 컬렉션을 다시 만듭니다.데이터를 삭제하고 컬렉션을 그대로 둘 수 있는 방법이 있나요?삭제 작업에 시간이 오래 걸립니다.소장품에는 수백만 개의 엔트리가 있습니다.
컬렉션을 잘라내고 인덱스를 유지하려면
db.<collection>.remove({})
를 사용하여 컬렉션의 모든 데이터와 인덱스를 효율적으로 삭제할 수 있습니다.다수의 문서나 인덱스가 있는 컬렉션을 삭제하는 것이 모든 문서를 삭제하는 것보다 훨씬 효율적입니다.db.collection.remove({})
.그remove()
방법은 문서가 삭제될 때 색인 업데이트에 대한 추가 하우스키핑을 수행하며, 단일 컬렉션 삭제 명령 대신 oplog가 제거된 각 문서에 대한 항목을 포함하는 복제본 세트 환경에서는 훨씬 더 느립니다.
의 사용 예mongo
셸:
var dbName = 'nukeme';
db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) {
// Drop all collections except system ones (indexes/profile)
if (!collName.startsWith("system.")) {
// Safety hat
print("WARNING: going to drop ["+dbName+"."+collName+"] in 5s .. hit Ctrl-C if you've changed your mind!");
sleep(5000);
db[collName].drop();
}
})
컬렉션을 삭제하면 구성된 스토리지 엔진에 따라 스토리지 사용률이 달라집니다.
- WiredTiger(MongoDB 3.2 이후 기본 스토리지 엔진)는 드롭이 완료되면 드롭된 컬렉션(및 관련 인덱스)에서 사용되는 공간을 해방합니다.
- MMAPv1(MongoDB 3.0 이전 버전의 기본 스토리지 엔진)에서는 사전 할당된 디스크 공간이 확보되지 않습니다.이 방법은 사용 사례에 적합할 수 있습니다. 새 데이터를 삽입할 때 빈 공간을 재사용할 수 있습니다.
데이터베이스를 삭제하는 경우, 일반적으로 문서 삽입 시 컬렉션이 작성되므로 컬렉션을 명시적으로 작성할 필요가 없습니다.
단, 다음 예에서는 동일한 컬렉션 이름을 가진 데이터베이스를 삭제 및 다시 작성하는 방법을 보여 줍니다.mongo
셸:
var dbName = 'nukeme';
// Save the old collection names before dropping the DB
var oldNames = db.getSiblingDB(dbName).getCollectionNames();
// Safety hat
print("WARNING: going to drop ["+dbName+"] in 5s .. hit Ctrl-C if you've changed your mind!")
sleep(5000)
db.getSiblingDB(dbName).dropDatabase();
// Recreate database with the same collection names
oldNames.forEach(function(collName) {
db.getSiblingDB(dbName).createCollection(collName);
})
아래 쿼리는 컬렉션 내의 모든 레코드를 삭제하고 컬렉션을 그대로 유지합니다.
db.collectionname.remove({})
remove()
는 MongoDB 4에서는 권장되지 않습니다.
를 사용해야 합니다.deleteMany
또는 기타 기능:
db.<collection>.deleteMany({})
MongoDB에는 "truncate" 조작과 동등한 것이 없습니다.모든 문서를 삭제할 수 있지만 복잡도는 O(n)이거나 컬렉션을 삭제하면 복잡도는 O(1)가 되지만 인덱스가 손실됩니다.
데이터베이스와 컬렉션을 작성한 후 mongodump를 사용하여 데이터베이스를 bson 파일로 백업합니다.
mongodump --db database-to-use
그런 다음 데이터베이스를 삭제하고 이전 환경을 다시 만들어야 할 경우 mongorestore를 사용하십시오.
mongorestore --drop
mongodump 명령을 사용하면 현재 작업 디렉토리의 dump 폴더에 백업이 저장됩니다.
db.drop()
method는 영향을 받는 데이터베이스에 대한 쓰기 잠금을 취득하여 완료될 때까지 다른 작업을 차단합니다.
는 ★★★★★★★★★★★★★★★★★★★★★★★db.remove({})
이 db.drop()
.
언급URL : https://stackoverflow.com/questions/16493902/truncate-a-collection
'programing' 카테고리의 다른 글
setState가 즉시 업데이트되지 않음 (0) | 2023.03.28 |
---|---|
Angular를 테스트하려면 어떻게 해야 합니까?재스민과의 JS 서비스? (0) | 2023.03.28 |
외부에서 React 구성 요소 메서드를 호출합니다. (0) | 2023.03.28 |
반응 + 환원 - 입력에 상태 값이 있을 때 입력 onChange가 매우 느립니다. (0) | 2023.03.28 |
JSON을 사용하지 않고 JSON을 해석하는 방법NET 라이브러리? (0) | 2023.03.28 |