2013-01-21 36 views
1

MongoDB中給出了重命名列名如下如何使用MongoMapper重命名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(....) 

和做同樣的查詢,但它不工作。

回答

1

MongoMapper使用10gen Ruby驅動程序,而MongoMapper :: Document提供對底層驅動程序對象的訪問。

以下工作測試顯示您可以使用Model.collection.update來執行您想要的操作,以便爲模型「模型」重命名一個字段。如果要更新/重命名多個文檔,請確保使用:multi => true選項進行更新。

應用程序/模型/ model.rb

class Model 
    include MongoMapper::Document 
end 

測試/單位/ model_test.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 

$耙測試

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.s, 81.0110 tests/s, 162.0220 assertions/s. 

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips