如何使用MongoMapper在Mongodb中重命名集合中的列?

如何使用MongoMapper在Mongodb中重命名集合中的列?,mongodb,mongomapper,Mongodb,Mongomapper,Mongodb提供了重命名列名的选项,如下所示 db.collection.update({},{'$rename'=> {'old_name' => 'new_name'}}, false,true) 使用MongoMapper也可以这样做吗?文档没有指定任何内容 我还尝试从MongoMapper获取Mongodb连接句柄,如下所示: connection = MongoMapper.connection db = MongoMapper.database collection

Mongodb提供了重命名列名的选项,如下所示

db.collection.update({},{'$rename'=> {'old_name' => 'new_name'}}, false,true)
使用MongoMapper也可以这样做吗?文档没有指定任何内容

我还尝试从MongoMapper获取Mongodb连接句柄,如下所示:

connection = MongoMapper.connection 
db = MongoMapper.database
collection = db.collection('collection_name')
collection .update(....)

并执行相同的查询,但不起作用。

MongoMapper使用10gen Ruby驱动程序,MongoMapper::Document提供对底层驱动程序对象的访问

下面的工作测试显示,您可以使用Model.collection.update执行您想要的操作,为模型“Model”重命名字段。如果要更新/重命名多个文档,请确保使用:multi=>true选项进行更新

app/models/model.rb

class Model
  include MongoMapper::Document
end
测试/单元/模型测试.rb

require 'test_helper'

class ModelTest < ActiveSupport::TestCase
  def setup
    Model.remove
  end

  test "rename" do
    puts "Model.collection.class: #{Model.collection.class}"
    puts "Model.database.class: #{Model.database.class}"
    Model.create( 'old_name' => 'name value 0', 'another_key' => 'another value 0' )
    Model.create( 'old_name' => 'name value 1', 'another_key' => 'another value 1' )
    assert_equal(2, Model.where( 'old_name' => { '$exists' => true } ).count)
    Model.collection.update( {}, { '$rename' => { 'old_name' => 'new_name' } }, :multi => true )
    assert_equal(0, Model.where( 'old_name' => { '$exists' => true } ).count)
    p Model.all
  end
end
需要“测试助手”
类ModelTest'name value 0','other_key'=>'other value 0')
Model.create('old_name'=>'name value 1','other_key'=>'other value 1')
assert_equal(2,Model.where('old_name'=>{'$exists'=>true}).count)
Model.collection.update({},{'$rename'=>{'old\u name'=>'new\u name'},:multi=>true)
assert_equal(0,Model.where('old_name'=>{'$exists'=>true}).count)
p.全部
结束
结束
$rake测试

Rack::File headers parameter replaces cache_control after Rack 1.5.
Run options: 

# Running tests:

Model.collection.class: Mongo::Collection
Model.database.class: Mongo::DB
[DEPRECATED] The 'safe' write concern option has been deprecated in favor of 'w'.
[#<Model _id: BSON::ObjectId('5101809d7f11ba1256000001'), another_key: "another value 0", new_name: "name value 0">, #<Model _id: BSON::ObjectId('5101809d7f11ba1256000002'), another_key: "another value 1", new_name: "name value 1">]
.

Finished tests in 0.012344s, 81.0110 tests/s, 162.0220 assertions/s.

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips
Rack::File headers参数取代Rack 1.5之后的cache_控件。
运行选项:
#运行测试:
Model.collection.class:Mongo::collection
Model.database.class:Mongo::DB
[已弃用]已弃用“安全”写关注点选项,改为“w”。
[#, #]
.
在0.012344s、81.0110测试/秒、162.0220断言/秒中完成测试。
1次测试,2次断言,0次失败,0次错误,0次跳过

MongoMapper使用10gen Ruby驱动程序,MongoMapper::Document提供对底层驱动程序对象的访问

下面的工作测试显示,您可以使用Model.collection.update执行您想要的操作,为模型“Model”重命名字段。如果要更新/重命名多个文档,请确保使用:multi=>true选项进行更新

app/models/model.rb

class Model
  include MongoMapper::Document
end
测试/单元/模型测试.rb

require 'test_helper'

class ModelTest < ActiveSupport::TestCase
  def setup
    Model.remove
  end

  test "rename" do
    puts "Model.collection.class: #{Model.collection.class}"
    puts "Model.database.class: #{Model.database.class}"
    Model.create( 'old_name' => 'name value 0', 'another_key' => 'another value 0' )
    Model.create( 'old_name' => 'name value 1', 'another_key' => 'another value 1' )
    assert_equal(2, Model.where( 'old_name' => { '$exists' => true } ).count)
    Model.collection.update( {}, { '$rename' => { 'old_name' => 'new_name' } }, :multi => true )
    assert_equal(0, Model.where( 'old_name' => { '$exists' => true } ).count)
    p Model.all
  end
end
需要“测试助手”
类ModelTest'name value 0','other_key'=>'other value 0')
Model.create('old_name'=>'name value 1','other_key'=>'other value 1')
assert_equal(2,Model.where('old_name'=>{'$exists'=>true}).count)
Model.collection.update({},{'$rename'=>{'old\u name'=>'new\u name'},:multi=>true)
assert_equal(0,Model.where('old_name'=>{'$exists'=>true}).count)
p.全部
结束
结束
$rake测试

Rack::File headers parameter replaces cache_control after Rack 1.5.
Run options: 

# Running tests:

Model.collection.class: Mongo::Collection
Model.database.class: Mongo::DB
[DEPRECATED] The 'safe' write concern option has been deprecated in favor of 'w'.
[#<Model _id: BSON::ObjectId('5101809d7f11ba1256000001'), another_key: "another value 0", new_name: "name value 0">, #<Model _id: BSON::ObjectId('5101809d7f11ba1256000002'), another_key: "another value 1", new_name: "name value 1">]
.

Finished tests in 0.012344s, 81.0110 tests/s, 162.0220 assertions/s.

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips
Rack::File headers参数取代Rack 1.5之后的cache_控件。
运行选项:
#运行测试:
Model.collection.class:Mongo::collection
Model.database.class:Mongo::DB
[已弃用]已弃用“安全”写关注点选项,改为“w”。
[#, #]
.
在0.012344s、81.0110测试/秒、162.0220断言/秒中完成测试。
1次测试,2次断言,0次失败,0次错误,0次跳过