Answers:
在mongo shell中:
use [database];
db.dropDatabase();
并删除用户:
db.dropAllUsers();
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”开头的集合名称。
remove
它代替更加可靠drop
。该remove
选项似乎在维护您要清除的集合的字段上的约束。当我们采用该 drop
方法时,unique
在下降之后,对我们其中一个领域的约束就不成立。
else
分支(对if (c.indexOf("system.") == -1)
,做)remove
代替drop
。如果你不使用他们了你不空的藏品留这样
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
我遵循db.dropDatabase()
了很长时间,但是如果您试图在测试用例之间使用它来擦拭数据库,则可能最终会发现数据库删除后索引约束得不到满足的问题。结果,您可能需要弄乱确保索引,或者更简单的方法是一起避免dropDatabase,而只是在循环中从每个集合中删除,例如:
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
就我而言,我是使用以下命令从命令行运行的:
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
db[collection_name].drop()
它,它所显示的问题与您描述的db.dropDatabase()
方法相同。切换 s/drop/remove/
工作出色!
remove()
在Windows的MongoDB上无法正常运行,而是需要remove({})
在OSX和Windows上都可以正常运行。
通过编译来自@Robse和@DanH的答案(非常感谢!),我得到了以下解决方案,这些解决方案使我完全满意:
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
连接到您的数据库,运行代码。
它通过删除用户集合并清空系统集合来清理数据库。
采用
[databaseName]
db.Drop+databaseName();
drop collection
use databaseName
db.collectionName.drop();
db.getCollectionNames().forEach(c=>db[c].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();
}
}
);
说删除博客的最简单方法是博客:
> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
MongoDB db.dropDatabase()文档介绍了2.6中引入的修改:
在2.6版中更改:此命令不会删除与当前数据库关联的用户。
在MongoDB 3.2和更高版本Mongo().getDBNames()
中,mongo
shell将在服务器中输出数据库名称列表:
> 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