Mongodb 如何删除与已填充数据库同名的空Mongo数据库?
我不小心创建了两个同名的数据库。当我在Mongo shell中显示dbs时,我得到以下结果:Mongodb 如何删除与已填充数据库同名的空Mongo数据库?,mongodb,Mongodb,我不小心创建了两个同名的数据库。当我在Mongo shell中显示dbs时,我得到以下结果: > show dbs admin (empty) local 0.078GB example_development (empty) example_development 0.078GB 有没有一种方法可以在不篡改已填充数据库的情况下删除空数据库 数据库名称不一样,只是其中有一个不可打印的字符,MongoShell的javascript接口正在为您抑制该字符 在mongo中,由驱动程序来确保用
> show dbs
admin (empty)
local 0.078GB
example_development (empty)
example_development 0.078GB
有没有一种方法可以在不篡改已填充数据库的情况下删除空数据库 数据库名称不一样,只是其中有一个不可打印的字符,MongoShell的javascript接口正在为您抑制该字符 在mongo中,由驱动程序来确保用户不能向服务器提交非标准数据,但BSON在存储方面非常灵活 因为您谈论的是整个数据库,所以解决此问题的最简单方法是关闭mongo并删除数据库文件。您可以使用
db.serverCmdLineOpts()
命令找到这些文件的位置。因为您很可能有一个不可打印的字符。但是,与直接从文件系统中删除文件不同,我更喜欢一种更具编程性的方法。这里的关键是永远不要真正按字面名称调用数据库,而是以变量形式保留对名称的引用:
getSiblingDB
应用到每个数据库)db.dropDatabase
sizenodisk
进行过滤,而不是专门通过name
进行过滤。请确保不要在此处选择“admin”,因此首先使用过滤器/映射运行adminCommand
,以获取适用的索引。“admin”很可能位于索引0处,因此您的数据库很可能位于索引1处:
db.getSiblingDB(db.adminCommand({listDatabases:1}).databases.filter(function(d){
return !d.sizeOnDisk;
}).map(function(d){
return d.name;
})[1]).dropDatabase(); // note usage of [1] here
这应该是不可能的。您是否可以编辑您的问题以包含来自
db.adminCommand('listDatabases')
的输出?
db.getSiblingDB(db.adminCommand({listDatabases:1}).databases.filter(function(d){
return !d.sizeOnDisk;
}).map(function(d){
return d.name;
})[1]).dropDatabase(); // note usage of [1] here