删除MongoDB数据库中的所有内容

Delete everything in a MongoDB database

我在MongoDB上进行开发。 对于完全非邪恶的目的,我有时想要吹掉数据库中的所有东西 - 也就是说,删除每一个集合,以及其他任何可能存在的东西,并从头开始。 是否有一行代码可以让我这样做? 同时给出MongoDB控制台方法和MongoDB Ruby驱动程序方法的加分点。


在mongo shell中:

1
2
use [database];
db.dropDatabase();

Ruby代码非常相似。


另外,从命令行:

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


当我需要重置所有集合但不想让任何数据库用户失去时,我遇到了同样的问题。如果要保存数据库的用户配置,请使用以下代码行:

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

此代码将遍历一个数据库中的所有集合名称,并删除那些不以"system"开头的集合。


我遵循db.dropDatabase()路由很长一段时间,但是如果你试图在测试用例之间使用它来擦除数据库,你最终可能会发现数据库丢弃后索引约束无法得到满足的问题。因此,您可能需要使用ensureIndexes,或者更简单的路径将完全避免使用dropDatabase,只需从循环中删除每个集合,例如:

1
2
3
4
5
db.getCollectionNames().forEach(
  function(collection_name) {
    db[collection_name].remove()
  }
);

在我的情况下,我使用以下命令从命令行运行:

1
mongo [database] --eval"db.getCollectionNames().forEach(function(n){db[n].remove()});"


通过编译@Robse和@DanH(kudos!)的答案,我得到了以下完全满足我的解决方案:

1
2
3
4
5
6
db.getCollectionNames().forEach( function(collection_name) {
  if (collection_name.indexOf("system.") == -1)
       db[collection_name].drop();
  else  
       db.collection_name.remove({});
});

连接到您的数据库,运行代码。

它通过删除用户集合并清空系统集合来清理数据库。


听到一些使用mongo shell的mongodb的完全删除操作

要删除集合中的特定文档:db.mycollection.remove( {name:"stack"} )

要删除集合中的所有文档:db.mycollection.remove()

要删除集合:db.mycollection.drop()

删除数据库:
首先通过use mydb命令转到该数据库然后

1
db.dropDatabase()


使用

1
2
3
4
5
6
7
[databaseName]
db.Drop+databaseName();

drop collection

use databaseName
db.collectionName.drop();

如果要仅删除数据库及其子集合,请使用以下命令:

  • use ;
  • db.dropDatabase();

如果你想删除mongo中的所有数据库,那么使用:

1
2
3
4
5
6
7
8
db.adminCommand("listDatabases").databases.forEach(function(d)
             {
              if(d.name!="admin" && d.name!="local" && d.name!="config")
                {
                 db.getSiblingDB(d.name).dropDatabase();
                }
             }
          );


如果您需要一次性删除所有内容:(一次删除所有数据库)

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

对于流星开发者。

  • localhost:3000中运行应用程序时打开第二个终端窗口。

  • 在项目的文件夹中运行meteor mongo

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

  • 然后输入db.yourCollectionName.drop();

  • 您将自动在本地服务器中看到更改。

  • 对于其他人。

    db.yourCollectionName.drop();


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


  • 列出所有可用的dbs
    显示dbs
  • 选择必要的数据库
    使用
  • 删除数据库
    db.dropDatabase()
    //几乎没有其他命令
  • 列出数据库中可用的所有集合
    显示集合
  • 删除规范集合
    db.collection.drop()
  • 希望有所帮助


    我更喜欢

    1
    db.your_collection.remove({})

    过度

    1
    db.your_collection.drop()

    如果您的收藏品是特殊收藏品
    即一个上限的集合或一个标记为唯一的字段的集合,drop将清除集合本身,当再次创建集合时,它将是一个普通的集合。您必须再次定义属性。
    因此,使用remove()清除文档而不删除集合并影响集合的行为。


    删除数据库的最简单方法是说博客:

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

    要删除所有数据库,请使用:

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

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

    done

    1
    2
    3
    4
    use <dbname>
    db.dropAllUsers()
    db.dropAllRoles()
    db.dropDatabase()

    MongoDB db.dropDatabase()文档解释了2.6中引入的修改:

    Changed in version 2.6: This command does not delete the users associated with the current database.


    在MongoDB 3.2及更新版本中,mongo shell中的Mongo().getDBNames()将输出服务器中的数据库名称列表:

    1
    2
    3
    4
    5
    6
    7
    8
    > Mongo().getDBNames()
    ["local","test","test2","test3" ]

    > show dbs
    local  0.000GB
    test   0.000GB
    test2  0.000GB
    test3  0.000GB

    然后,数组上的forEach()循环可以调用dropDatabase()来删除所有列出的数据库。您可以选择跳过一些您不想删除的重要数据库。例如:

    1
    2
    3
    4
    5
    6
    7
    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();
      }
    })

    示例运行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    > 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