MongoDB에서 개발 중입니다. 완전히 사악하지 않은 목적으로 때로는 데이터베이스의 모든 것을 날려 버려야합니다. 즉, 모든 단일 컬렉션과 그 밖의 모든 것을 삭제하고 처음부터 시작하려고합니다. 이 작업을 수행 할 수있는 단일 코드 줄이 있습니까? MongoDB 콘솔 방법과 MongoDB Ruby 드라이버 방법을 모두 제공하는 보너스 포인트.
답변
몽고 껍질에서 :
use [database];
db.dropDatabase();
그리고 사용자를 제거하려면 :
db.dropAllUsers();
답변
또한 명령 행에서 :
mongo DATABASE_NAME --eval "db.dropDatabase();"
답변
모든 컬렉션을 재설정해야하지만 데이터베이스 사용자를 잃고 싶지 않을 때도 같은 문제가 발생했습니다. 데이터베이스의 사용자 구성을 저장하려면 다음 코드 행을 사용하십시오.
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
이 코드는 하나의 데이터베이스에서 모든 컬렉션 이름을 살펴보고 “system”으로 시작하지 않는 이름을 삭제합니다.
답변
나는 db.dropDatabase()
오랫동안 경로를 따랐 지만 테스트 사례 사이에서 데이터베이스를 닦아 내기 위해 이것을 사용하려고하면 데이터베이스 삭제 후 인덱스 제약 조건에 문제가있을 수 있습니다. 결과적으로 ensureIndexes를 망칠 필요가 있거나 간단한 경로는 dropDatabase를 함께 피하고 다음과 같은 루프의 각 컬렉션에서 제거합니다.
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
제 경우에는 다음을 사용하여 명령 줄에서 이것을 실행했습니다.
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
답변
@Robse와 @DanH (kudos!)의 답변을 컴파일하면 완전히 만족하는 다음 솔루션이 있습니다.
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
데이터베이스에 연결하고 코드를 실행하십시오.
사용자 콜렉션을 삭제하고 시스템 콜렉션을 비워서 데이터베이스를 정리합니다.
답변
mongo 셸을 사용하는 mongodb에 대한 전체 삭제 작업이 있습니다.
컬렉션에서 특정 문서를 삭제하려면 db.mycollection.remove( {name:"stack"} )
컬렉션의 모든 문서를 삭제하려면 db.mycollection.remove()
컬렉션을 삭제하려면 db.mycollection.drop()
데이터베이스를 삭제하려면 : 먼저 use mydb
명령 으로 해당 데이터베이스로 이동 한 다음
db.dropDatabase()
답변
사용하다
[databaseName]
db.Drop+databaseName();
drop collection
use databaseName
db.collectionName.drop();