2016-11-10 42 views

回答

1

通常你会做

use [db]; 
db.dropDatabase(); 

什么use命令实际上的做法是将数据库对象设置为db。对于UTF-8数据库名称,您可能会发现无法运行use命令。作为获取db对象的替代方法,您可以运行db.getSisterDB([db name])然后删除它。
所以这应该做的伎俩:

var db2 = db.getSisterDB(emptyDbs[0].name); 
db2.dropDatabase(); 

还有另一种方法getSiblingDB返回相同db对象。如果你想知道它们之间有什么区别,那么没有区别。

replset:PRIMARY> db.getSiblingDB 
function (name) { 
    return this.getMongo().getDB(name); 
} 
replset:PRIMARY> db.getSisterDB 
function (name) { 
    return this.getMongo().getDB(name); 
} 

编辑: 由于上述解决方案不会为你工作。我认为你可以尝试的最后一件事是去dbpath,找到由UTF-8字符命名的文件并删除它们。您可能不会以该名称提交任何文件。因为当你看到(空的)跟随一个db名字时,通常意味着db被删除。如果是这样,只需重新启动实例即可解决问题。
请记住在执行此操作之前停止数据库。在做任何事之前做好备份。

这种方式只适用于MMAPv1存储引擎。

+0

用代码,试着解释一下。 –

+0

我认为代码非常简单。但好的,我添加一些解释。 – yaoxing

+0

早上好 我已经试过这种方式,但没有奏效。尽管dropDatabase()命令显示数据库已被删除,但当我运行show dbs时,它仍然存在。 > emptyDbs [0] .NAME > emptyDbs [1] .NAME >变种DB2 = db.getSisterDB(emptyDbs [0]。名称); > var db3 = db.getSisterDB(emptyDbs [1] .name); > db2.dropDatabase() {“dropped”:“ ”,“ok”:1} > db3.dropDatabase() {“dropped”:“ ”,“ok”:1} > show dbs <其他数据库> (空) (空) –