답변:
몽고 껍질에서 :
use [database];
db.dropDatabase();
그리고 사용자를 제거하려면 :
db.dropAllUsers();
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"으로 시작하지 않는 이름을 삭제합니다.
remove
대신 을 사용하는 것이 더 신뢰할 수 있습니다 drop
. 이 remove
옵션은 지우려는 컬렉션의 필드에 대한 제약 조건을 유지하는 것으로 나타납니다. 우리가이 drop
방법을 사용할 때 , unique
우리 분야 중 하나에 대한 제약은 하락 이후에 존중되지 않았다.
else
합니다 (에 가지 if (c.indexOf("system.") == -1)
않는) remove
대신를 drop
. 그렇게하면 더 이상 사용하지 않으면 빈 모음집이 남지 않습니다.
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
나는 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()});"
db[collection_name].drop()
중이며 db.dropDatabase()
방법으로 설명한 것과 동일한 문제를 보여주었습니다 . s/drop/remove/
작업을 훌륭하게 전환 !
remove()
Windows 용 MongoDB를 잘 작동하지 않습니다, 대신 내가 할 필요가 remove({})
OSX와 Windows 모두에서 작동한다.
@Robse와 @DanH (kudos!)의 답변을 컴파일하면 완전히 만족하는 다음 솔루션이 있습니다.
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
데이터베이스에 연결하고 코드를 실행하십시오.
사용자 콜렉션을 삭제하고 시스템 콜렉션을 비워서 데이터베이스를 정리합니다.
db.getCollectionNames().forEach(c=>db[c].drop())
데이터베이스와 해당 하위 컬렉션 만 삭제하려면 다음을 사용하십시오.
use <database name>;
db.dropDatabase();
mongo의 모든 데이터베이스를 삭제하려면 다음을 사용하십시오.
db.adminCommand("listDatabases").databases.forEach(function(d)
{
if(d.name!="admin" && d.name!="local" && d.name!="config")
{
db.getSiblingDB(d.name).dropDatabase();
}
}
);
데이터베이스를 삭제하는 가장 간단한 방법은 블로그라고 말합니다.
> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
나는 선호한다
db.your_collection.remove({})
위에
db.your_collection.drop()
컬렉션이 특수 컬렉션 인 경우 (예 : 캡핑 된 컬렉션 또는 고유 한 것으로 표시된 하나의 필드가있는 컬렉션) 드롭하면 컬렉션 자체가 지워지고 컬렉션이 다시 만들어지면 일반 컬렉션이됩니다. 속성을 다시 정의해야합니다. 따라서 remove()
컬렉션을 제거하지 않고 컬렉션 동작에 영향을주지 않고 문서를 지우는 데 사용 하십시오.
drop()
거의 즉각적이며 remove({})
몇 분 또는 수십 분 동안 DB를 잠급니다 (컬렉션 크기에 따라 다름).
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
2.6에 도입 된 수정 사항을 설명하는 MongoDB db.dropDatabase () 문서 :
버전 2.6으로 변경 :이 명령은 현재 데이터베이스와 연관된 사용자를 삭제하지 않습니다.
MongoDB를 3.2 및 최신에서는 Mongo().getDBNames()
에서 mongo
서버에서 데이터베이스 이름의 쉘 출력됩니다 목록 :
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
forEach()
그런 다음 배열에 대한 루프 dropDatabase()
는 나열된 모든 데이터베이스를 삭제하기 위해 호출 할 수 있습니다. 선택적으로 삭제하지 않을 중요한 데이터베이스를 건너 뛰도록 선택할 수 있습니다. 예를 들면 다음과 같습니다.
Mongo().getDBNames().forEach(function(x) {
// Loop through all database names
if (['admin', 'config', 'local'].indexOf(x) < 0) {
// Drop if database is not admin, config, or local
Mongo().getDB(x).dropDatabase();
}
})
예제 실행 :
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
> Mongo().getDBNames().forEach(function(x) {
... if (['admin', 'config', 'local'].indexOf(x) < 0) {
... Mongo().getDB(x).dropDatabase();
... }
... })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB