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シェルヘルパーがあり、上記の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 に答える