0

我有一个使用 Ruby 2.2.2 的测试应用程序,并且正在使用 Mongoid 7.0.0 和 Moped 1.5.3 和 MongoDB 3.6.2 - 我们正在使用 Mongoid 4.x 和 MongoDB 2.6 升级一个古老的代码库,并在API 一路走来

最严重的是我们曾经能够做 SomeModel.collection.rename 但是这个 API 方法现在不再存在(据我所知)并给出一个未定义的错误

我还尝试了以下方法:

Mongoid.default_client.command({ renameCollection: "test.some_collection", to: "test.some_collection2", dropTarget: true })

然而这会返回

Mongo::Error::OperationFailure: renameCollection may only be run against the admin database. (13)

但是,从命令外壳中,我可以发出:

db.some_collection.renameCollection("some_collection2") 

这很有效——这似乎是我所看到的唯一的最后手段,我将如何将其作为助力车命令发出?(我对语法方案不太熟悉)

还有,这么看似简单的操作,有什么理由显然没有被 Mongoid 曝光?

4

1 回答 1

0

所以找到了一种方法 - 我的一些收藏品存储在不同的数据库中

# returns a hash of client config from mongoid.yml eg ["secondary_db", { "database" => "myDB", hosts => [xxx, xxx, xxx] }]
cfg = Mongoid.clients.select { |k,v| Mongoid.clients[k][:database] == MyModel.storage_options[:database] }.first 

# now create a new Client instance using the right database
client = Mongo::Client.new(cfg[1]["hosts"], { database: cfg[1]["database"]})

client.command("$eval" => "db.my_collection.renameCollection('new_col_name')")
于 2018-04-04T15:40:19.917 回答