我正在尝试使用ruby中的MongoMapper重命名数据库。 是否可以这样做? 任何替代黑客都能做到这一点?
答案 0 :(得分:2)
正如上面提到的另一个堆栈溢出问题所述,MongoDB实际上没有能力重命名数据库。但是,您可以复制然后删除但请注意这将导致重建索引。您不希望为大型数据集执行此操作。
mongo-ruby-driver(以及大多数10gen驱动程序)能够通过调用任何数据库对象实例上的MongoDB command方法来执行任何DB#command。
在Ruby驱动程序中,您将执行以下操作:
require 'mongo'
client = Mongo::MongoClient.new
db = client.db('admin')
db.command({:copydb => 1, :fromdb => oldname, :todb => newname})
client.drop_database(oldname)
更新:在较新版本的MongoDB中,有一个用于db.rename()的JS shell帮助程序,它完全按照上面的ruby代码执行。
function (newName) {
if(newName == this.getName() || newName.length === 0)
return;
this.copyDatabase(this.getName(), newName, "localhost");
this.dropDatabase();
db = this.getSiblingDB(newName);
}
除此之外,还有以下功能请求票证,用于使db.rename()成为第一个类命令。请随时提供此功能。