如何使用MongoMapper在Ruby中重命名一个数据库?

22 浏览
0 Comments

如何使用MongoMapper在Ruby中重命名一个数据库?

我尝试在Ruby中使用MongoMapper重命名数据库。

有没有可能做到这一点?

有没有其他的hack方法来完成同样的任务?

admin 更改状态以发布 2023年5月23日
0
0 Comments

正如上述其他问题所提到的,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的更新版本中,有一个JS shell助手用于db.rename(),其功能与上面的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

0