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

我在MongoDB上做开发。出于完全无害的目的,我有时想要删除数据库中的所有内容——也就是说,删除每一个集合,以及周围可能存在的任何其他内容,然后从头开始。是否有一行代码可以让我这样做?同时提供MongoDB控制台方法和MongoDB Ruby驱动程序方法的额外好处。

347695 次浏览

在蒙戈壳里:

use [database];
db.dropDatabase();

并删除用户:

db.dropAllUsers();

同样,在命令行中:

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

使用

[databaseName]
db.Drop+databaseName();


drop collection


use databaseName
db.collectionName.drop();

这里有一些有用的删除操作mongodb使用mongo shell

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

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

要删除任何特定的集合:db.mycollection.drop()

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

db.dropDatabase()

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

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

这段代码将遍历一个数据库中的所有集合名称,并删除不以“system.”开头的集合名称。

如果你只想删除一个数据库和它的子集合,使用这个:

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

我很长一段时间都遵循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的答案,我得到了以下完全让我满意的解决方案:

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

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

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

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

删除所有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()

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

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

    列出所有可用的dbs 李show dbs < / >
  1. 选择必要的db 李使用< / >
  2. 删除数据库 db.dropDatabase () //一些额外的命令
  3. . txt
  4. 列出db中所有可用的集合 显示集合李< / >
  5. 删除一个规范集合 李db.collection.drop () < / >

希望这能有所帮助

我更喜欢

db.your_collection.remove({})

db.your_collection.drop()

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

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

> 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

如果你需要立即删除所有数据库:(立即删除所有数据库)

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
db.getCollectionNames().forEach(c=>db[c].drop())