如何在ruby中使用MongoMapper重命名数据库?

时间:2013-03-08 21:13:36

标签: ruby-on-rails ruby mongodb mongomapper

我正在尝试使用ruby中的MongoMapper重命名数据库。 是否可以这样做? 任何替代黑客都能做到这一点?

1 个答案:

答案 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()成为第一个类命令。请随时提供此功能。

https://jira.mongodb.org/browse/SERVER-701