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

时间:2010-07-29 19:51:10

标签: mongodb

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

17 个答案:

答案 0 :(得分:553)

在mongo shell中:

use [database];
db.dropDatabase();

Ruby code is pretty similar

答案 1 :(得分:108)

另外,从命令行:

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

答案 2 :(得分:59)

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

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

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

答案 3 :(得分:33)

我遵循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()});"

答案 4 :(得分:14)

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

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

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

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

答案 5 :(得分:9)

使用mongo shell

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

删除馆藏中的特定文件:db.mycollection.remove( {name:"stack"} )

删除馆藏中的所有文件:db.mycollection.remove()

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

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

db.dropDatabase()

答案 6 :(得分:8)

使用

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();

答案 7 :(得分:4)

如果您只想删除数据库及其子集,请使用:

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

答案 8 :(得分:3)

以防您需要一次删除所有内容:(一次删除所有数据库)

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

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

我更喜欢

db.your_collection.remove({})

db.your_collection.drop()

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

答案 11 :(得分:1)

  1. 列出所有可用的dbs show dbs
  2. 选择必要的数据库  使用
  3. 删除数据库  db.dropDatabase() //几乎没有其他命令
  4. 列出数据库中可用的所有集合 展示收藏品
  5. 删除规范集合 db.collection.drop()
  6. 希望有所帮助

答案 12 :(得分:1)

对于Meteor开发者。

  1. localhost:3000中运行您的应用时打开第二个终端窗口。

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

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

  3. 然后只需输入db.yourCollectionName.drop();

  4. 即可
  5. 您将自动在本地服务器中看到更改。

  6. 对于其他所有人。

    db.yourCollectionName.drop();

答案 13 :(得分:0)

use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()

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

  

版本2.6中更改:此命令不会删除与当前数据库关联的用户。

答案 14 :(得分:0)

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

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

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

done 

答案 15 :(得分:0)

在MongoDB 3.2和更高版本中,Mongo().getDBNames() shell中的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

答案 16 :(得分:0)

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