我尝试了很多方法来更新现有的bson文档,但它永远不会改变我的mongodb:
col = db["collection"]
col.insert({"ben": 1})
doc = col.find().to_a.first
# => {"_id"=>BSON::ObjectId('556c7f1b167e70640070a4d9'), "ben"=>1}
首次尝试更新:
doc.merge!({"ben": 5, "ams": 6})
col.find().to_a.first
# => {"_id"=>BSON::ObjectId('556c7f1b167e70640070a4d9'), "ben"=>1}
第二次尝试更新:
doc.update({"ben": 5, "ams": 6})
col.find().to_a.first
# => {"_id"=>BSON::ObjectId('556c7f1b167e70640070a4d9'), "ben"=>1}
第三次尝试......
doc["ben"] = 5
doc["ams"] = 6
doc.save
# NoMethodError: undefined method `save' for #<BSON::Document:0x00000003f284d0>
如您所见,以上都不适用于我。谷歌搜索我找不到任何其他建议。你知道更新我的文件的方法吗?可能吗?
一旦你这样做:
col.find().to_a
# ^^^^
您正在处理与数据库无关的简单Ruby哈希数组。所以当你说:
doc.update({"ben": 5, "ams": 6})
你在叫Hash#update
。如果你想更新某些内容,你可以在update
返回的内容上调用find
:
col.find.update(:$set => { 'ben' => 5, 'ams' => 6 })
或者如果要替换整个文档:
col.find.update('ben' => 5, 'ams' => 6)
您通常会告诉find
您当然需要哪个特定文档。
请注意,update
仅更新它找到的第一个匹配文档,如果要更新所有匹配的文档,则使用update_all
。