如何使用ruby的mongo驱动程序来更新多级文档

时间:2014-09-25 19:12:20

标签: ruby mongodb driver

如何使用ruby的mongo驱动程序更新多级文档。例如,这是文档的一部分:

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

在mongo-shell中我可以做类似的事情:

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

1 个答案:

答案 0 :(得分: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