2014-09-25 58 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