2013-06-18 30 views
1

好吧,這可能是一個愚蠢的問題,但我一直在閱讀和嘗試不同的查詢,出於某種原因,我不能沒有拋出一個錯誤得到這個工作。這是我第一次使用MongoDB,它是在一個RoR項目中。我們設立了慈善機構來建立一個嘰嘰喳喳的處理領域,但最初並沒有放入模型。所以我們用慈善機構填充數據庫,但現在他們都沒有Twitter處理字段。我將它添加到模型中,現在創建的所有其他模型都會擁有它。

我的問題是,當我嘗試在我的數據庫我不斷收到在$指向設置錯誤已經更新了慈善機構:

namespace :add_tw_handles_fields_2013_6_13 do 

    desc "add_tw_handle" 
    task :add_tw_handle => :environment do |t, args| 
    # db.charity.update({ featured: false }, { $set: { tw_handle : "test"}}, false, true) 

    # got your 6 
    Charity.update({ }, 
     { 
     $set: { "tw_handle": "test"} 
     }, 
     { multi: true } 
    }) 

    end 
end 

我嘗試了2 synax上述要求,我在這2個文檔閱讀http://docs.mongodb.org/manual/reference/method/db.collection.update/http://docs.mongodb.org/manual/core/update/#Updating-The%24positionaloperator

我總是得到這個錯誤壽:

add_tw_handles_fields_2013_6_13.rake:16: syntax error, unexpected ':', expecting tASSOC 
     $set: { 

至於我可以告訴大家,是正確的語法。我在腳本中運行這個,所以我不認爲我需要db。在我的模型名稱之前(如未註釋的更新中所示)正確?我對此很陌生,但我從字面上複製並粘貼了示例並填寫了我的信息,但沒有任何內容。然後我嘗試添加一個查詢,但是直到達到$ set時纔會出現錯誤:我不知道爲什麼。這正如上面鏈接的Mongo文檔所示。

任何深入瞭解我的問題將不勝感激。

感謝,

艾倫

回答

0

好了,所以環顧四周,談論在這個項目上這個其他開發後是我發現:

裏面你想通過軌道不MongoDB的直接訪問對象軌道腳本:

下面的例子是從LIB /任務中運行的腳本

使用Rails的ActiveRecord的更新通過框架的入口

m = ModelName.find("51b610972f52760fcc003331") 

m.update_attributes(:attribute_name => "what you want to assign") 

m.save 

查找具有在軌從模型給出的ID的對象(訪問蒙戈DB直接)

object = ModelName.find({ 
    "$in" => { 
    "_id" => "51b610972f52760fcc003331" 
    } 
}) 

object.first.update_attributes(:attribute_name => "what you want to assign") 

從控制檯

軌範圍內內控制檯,您可以使用第一環節語法使用activerecord模型訪問您要查詢的對象。但是如果你想直接進入mongo控制檯,那麼語法與上面的略有不同。

基於其ID的收藏品之一將您的項目啓動蒙戈的根目錄下的控制檯和找對象後:

>mongo 
>show dbs 
>use dbsname 
>show collections 

>db.collection_name.find({ _id: { $in: [ ObjectId("51b610972f52760fcc003331") ] }}) 

但願這是有幫助的人剛開始學習,syntaxs是每個不同。我被告知mongo控制檯使用javascript運行,其中rails控制檯(和項目中)使用activerecord運行調用,然後操作MongoDB。上面的評論者只是直接從腳本中訪問mongoDB。所以希望這可以通過解決這個問題的不同方式來完成。

1

你得到的錯誤是紅寶石,沒有MongoDB的,因爲你想使用Ruby,這紅寶石不喜歡裏面MongoDB的JSON語法。 :)你的更新查詢看起來很好,但你需要將它翻譯成有些不同的Ruby語法。

coll.update({ }, { "$set" => { "tw_handle" => "test" } }); 

將工作假設coll是您的Collection對象。

請參閱here瞭解使用Ruby驅動程序的好教程(由MongoDB Ruby團隊編寫)。