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

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