2014-09-25 33 views
0

如何使用ruby的mongo驅動更新多級文檔。例如,這裏的docuement的一部分:如何使用ruby的mongo驅動更新多級文檔

... 
"group_overrides": [ 
    { 
    "additional_filesystem_gb": 0, 
    "components": [ 
     { 
     "comp": "jbosseap-6", 
     "cart": "jbosseap-6", 
     "cart_id": ObjectId("5423d363f4b25eea0b000021") 
     } 
    ], 
    "max_gears": 1 
    } 
], 

在蒙戈殼我可以這樣做:

db.applications.update({name:"ulmuqhfv"}, {$set: {"group_overrides.0.additional_filesystem_gb": 1}}) 

和文檔將被更新。當我嘗試以下內容時:

db.update('applications', {"app_name"=>"ulmuqhfv"}, {"$set"=>{"group_overrides.0.additional_filesystem_gb"=>1}) 

失敗。什麼是更新數組的正確語法?

db是一個圍繞ruby mongo驅動程序的包裝類的實例。這裏的更新方法是什麼樣子:

def update(c_name, selector, opts) 
    db = @db.collection(c_name) 
    if opts 
    db.update(selector, opts).to_a 
    else 
    db.update(selector).to_a 
    end 
end 
+0

Ruby中的db是什麼? 「失敗」的具體含義是什麼? – 2014-09-25 19:21:47

+0

db只是一個包裝,它基本上是對集合的訪問並調用update() – cfpete 2014-09-25 20:42:05

回答

0

那樣簡單:

db['applications'].update({"app_name"=>"ulmuqhfv"}, {"$set"=>{"group_overrides.0.additional_filesystem_gb"=>1}) 

您需要訪問你的收藏,你訪問哈希鍵,db['applications']將返回集合對象

mongo_connection = Mongo::Connection.new("localhost", 27017) # your connection settings 
db = mongo_connection.db("mydb") # select database 
coll = db['applications'] # select collection 
coll.update({"app_name"=>"ulmuqhfv"}, {"$set"=>{"group_overrides.0.additional_filesystem_gb"=>1}) 

您可以瞭解更多here根據獲取收藏 section

+0

我的db類已經集合選擇了。我最終調用collection.update()就像你的答案一樣。請注意,在我的示例中,選擇器&opt散列與您所建議的相同... – cfpete 2014-09-25 20:44:41

+0

不依據您發佈的代碼。請將您的代碼發佈到您的數據庫類中,並嘗試直接使用它以更加清晰 – Dima 2014-09-25 20:47:59

+0

def update(c_name,selector,opts) db = @ db.collection(c_name) if opts db.update(selector,opts ).to_a 其他 db.update(選擇).to_a 結束 結束 – cfpete 2014-09-25 20:51:24

相關問題