Programming

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

procodes 2020. 2. 18. 22:55
반응형

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


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


몽고 껍질에서 :

use [database];
db.dropDatabase();

루비 코드는 매우 비슷 합니다.


또한 명령 행에서 :

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

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

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

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

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

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

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

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

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

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

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

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

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

다른 사람들을 위해.

db.yourCollectionName.drop();


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

희망이 도움이


나는 선호한다

db.your_collection.remove({})

위에

db.your_collection.drop()

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


db.getCollectionNames().forEach(c=>db[c].drop())

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

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

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

done 

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

참고 URL : https://stackoverflow.com/questions/3366397/delete-everything-in-a-mongodb-database



반응형