Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ruby的mongo驱动程序更新多级别文档_Ruby_Mongodb_Driver - Fatal编程技术网

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

如何使用ruby的mongo驱动程序更新多级别文档,ruby,mongodb,driver,Ruby,Mongodb,Driver,如何使用ruby的mongo驱动程序更新多层文档。例如,以下是文档的一部分: ... "group_overrides": [ { "additional_filesystem_gb": 0, "components": [ { "comp": "jbosseap-6", "cart": "jbosseap-6", "cart_id": ObjectId("5423d363f4b25eea0b000021")

如何使用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
就这么简单:

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})

您可以在获取集合部分了解更多信息

Ruby中的db是什么?它失败的具体含义是什么?db只是一个包装器,它基本上对集合进行访问并调用updatemy db类,集合已经选择了它。我最终会调用collection.update,就像您的答案一样。请注意,我的示例中的选择器和opt哈希与您建议的相同…不是根据您发布的代码。请将您的代码发布到您的db类中,并尝试直接使用它来更清晰地定义updatec_name、selector、opts db=@db.collectionc_name如果opts db.updateselector、opts.to_a else db.updateselector.to_a end end,如我所说,试着直接使用驱动程序并写出结果。我们的方法和我的方法有相同的结果。{UpdateExisting=>false,n=>0,lastOp=>seconds:0,increment:0,connectionId=>66,err=>nil,ok=>1.0}。。。但该文件并未更新。