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.