1

我正在尝试在 ruby​​ 中使用 MongoMapper 重命名数据库。可以这样做吗?任何替代黑客来完成同样的事情?

4

1 回答 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() 成为一流的命令。请随时支持此功能。

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

于 2013-03-12T22:46:10.570 回答