MongoDB 데이터베이스에서 모든 것을 삭제하십시오


454

MongoDB에서 개발 중입니다. 완전히 사악하지 않은 목적으로 때로는 데이터베이스의 모든 것을 날려 버려야합니다. 즉, 모든 단일 컬렉션과 그 밖의 모든 것을 삭제하고 처음부터 시작하려고합니다. 이 작업을 수행 할 수있는 단일 코드 줄이 있습니까? MongoDB 콘솔 방법과 MongoDB Ruby 드라이버 방법을 모두 제공하는 보너스 포인트.

답변:


587

몽고 껍질에서 :

use [database];
db.dropDatabase();

그리고 사용자를 제거하려면 :

db.dropAllUsers();

23
@connorbode 감사합니다. 나는 즉시 생각을 읽었고 : "B-그러나 영업 이익은 데이터베이스를 제거하고 싶어하지 않습니다!" . 매우 잘못된 명령 !!
Henrique Miranda

주의하여 사용하십시오. wiredTiger를 사용하는 샤드 환경에 있고 사용자 데이터베이스가없고 dropDatabase를 호출하면 새 레코드가 추가 될 때 데이터베이스가 삭제되고 다른 샤드에서 기본으로 다시 나타날 수 있습니다.
Jason R. Coombs

2
관련 데이터베이스에 연결된 사용자는 삭제되지 않습니다. 따라서 수동으로 삭제할 수 있습니다. db.dropAllUsers();
Fırat KÜÇÜK

2
"use dbs"명령을 사용한 후에는 데이터베이스가 표시되지 않습니다. 그러나 있습니다. 따라서 걱정할 필요가 없습니다.
wynshaft

@StepanYakovenko 아마도 MongoDB 인스턴스로 인증해야 할 것입니다
Josh K

113

또한 명령 행에서 :

mongo DATABASE_NAME --eval "db.dropDatabase();"

5
나는 이것이 2.4.6에서 작동한다고 생각하지 않습니다. 내 기록은 여전히 ​​존재합니다.
Brandon Clark

이것은 데이터베이스의 사용자들에게도 원격입니까?
Gert van den Berg

67

모든 컬렉션을 재설정해야하지만 데이터베이스 사용자를 잃고 싶지 않을 때도 같은 문제가 발생했습니다. 데이터베이스의 사용자 구성을 저장하려면 다음 코드 행을 사용하십시오.

use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })

이 코드는 하나의 데이터베이스에서 모든 컬렉션 이름을 살펴보고 "system"으로 시작하지 않는 이름을 삭제합니다.


2
@DanH에서 언급했듯이 remove대신 을 사용하는 것이 더 신뢰할 수 있습니다 drop. 이 remove옵션은 지우려는 컬렉션의 필드에 대한 제약 조건을 유지하는 것으로 나타납니다. 우리가이 drop방법을 사용할 때 , unique우리 분야 중 하나에 대한 제약은 하락 이후에 존중되지 않았다.
Scottymac

@Scottymac은 - 더 나은 아직, 추가 else합니다 (에 가지 if (c.indexOf("system.") == -1)않는) remove대신를 drop. 그렇게하면 더 이상 사용하지 않으면 빈 모음집이 남지 않습니다.
Bogdan D

1
보다 나은 db[c]사용, db.getCollection(c)피할 수있는 콜렉션 이름은 숫자가있을 때 오류를 .
Jason R. Coombs

1
docs 에 따르면 MongoDB 2.6부터 dropDatabase 명령은 사용자를 삭제하지 않으므로 허용되는 대답이 바람직합니다.
Jason R. Coombs

1
모음 이름이 숫자이면 대신 작동해야합니다.db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
Constantin Galbenu

35

나는 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()});"

1
이 제안에 감사 드리며, 우리는 사용 db[collection_name].drop()중이며 db.dropDatabase()방법으로 설명한 것과 동일한 문제를 보여주었습니다 . s/drop/remove/작업을 훌륭하게 전환 !
Scottymac

10
그 발견 remove()Windows 용 MongoDB를 잘 작동하지 않습니다, 대신 내가 할 필요가 remove({})OSX와 Windows 모두에서 작동한다.
DanH

팁 주셔서 감사합니다, 우리는 리눅스 플랫폼에 있지만 조금 더 살펴볼 가치가 있습니다.
Scottymac

2
db [collection_name] .remove ()에 쿼리가 없기 때문에 삭제에 대한 오류를 발견했습니다! db [collection_name] .remove ({})
JoelParke

16

@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 데이터베이스 내에서 모든 것을 정리합니다. 이 데이터베이스의 모든 모음을 지 웁니다.
staskrak

10

mongo 셸을 사용하는 mongodb에 대한 전체 삭제 작업이 있습니다.

컬렉션에서 특정 문서를 삭제하려면 db.mycollection.remove( {name:"stack"} )

컬렉션의 모든 문서를 삭제하려면 db.mycollection.remove()

컬렉션을 삭제하려면 db.mycollection.drop()

데이터베이스를 삭제하려면 : 먼저 use mydb명령 으로 해당 데이터베이스로 이동 한 다음

db.dropDatabase()


7

한 번에 모든 것을 삭제해야하는 경우 : (모든 데이터베이스를 한 번에 삭제)

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'


5

데이터베이스와 해당 하위 컬렉션 만 삭제하려면 다음을 사용하십시오.

  • 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();
                }
             }
          );

훌륭한 답변 ... 이것은 아마도 사용자가 받고있는 것입니다.
robert

1

데이터베이스를 삭제하는 가장 간단한 방법은 블로그라고 말합니다.

> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }

1

Meteor 개발자에게 적합합니다.

  1. 에서 앱을 실행하는 동안 두 번째 터미널 창을 엽니 다 localhost:3000.

  2. 프로젝트 폴더에서 meteor mongo.

    coolName = new Mongo.Collection('yourCollectionName');

  3. 그런 다음 간단히 입력하십시오 db.yourCollectionName.drop();

  4. 로컬 서버의 변경 사항이 자동으로 표시됩니다.

다른 사람들을 위해.

db.yourCollectionName.drop();


1
  1. 사용 가능한 모든 db show dbs 나열
  2. 필요한 DB 사용을 선택하십시오
  3. 데이터베이스 삭제 db.dropDatabase () // 몇 가지 추가 명령
  4. db show 모음에서 사용 가능한 모든 모음을 나열합니다.
  5. 스펙 콜렉션을 제거하십시오. db.collection.drop ()

희망이 도움이


1

나는 선호한다

db.your_collection.remove({})

위에

db.your_collection.drop()

컬렉션이 특수 컬렉션 인 경우 (예 : 캡핑 된 컬렉션 또는 고유 한 것으로 표시된 하나의 필드가있는 컬렉션) 드롭하면 컬렉션 자체가 지워지고 컬렉션이 다시 만들어지면 일반 컬렉션이됩니다. 속성을 다시 정의해야합니다. 따라서 remove()컬렉션을 제거하지 않고 컬렉션 동작에 영향을주지 않고 문서를 지우는 데 사용 하십시오.


1
좋은 지적입니다. 그러나 그것은 drop()거의 즉각적이며 remove({})몇 분 또는 수십 분 동안 DB를 잠급니다 (컬렉션 크기에 따라 다름).
Sergio Tulentsev

0

모든 DB를 삭제하려면 다음을 사용하십시오.

for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");

do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";

done 


0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.