我正在尝试在 ruby 中使用 MongoMapper 重命名数据库。可以这样做吗?任何替代黑客来完成同样的事情?
问问题
456 次
1 回答
2
正如上面提到的另一个堆栈溢出问题所述,MongoDB 实际上并没有重命名数据库的能力。但是,您可以先复制然后删除,但请注意这将导致重建索引。您不希望对大型数据集执行此操作。
mongo-ruby-driver(以及大多数 10gen 驱动程序)能够通过调用任何 DB 对象实例上 的DB#command方法来执行任何MongoDB 命令。
在 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() 成为一流的命令。请随时支持此功能。
于 2013-03-12T22:46:10.570 回答