[英]save / update a (Moped) BSON::Document with ruby
我嘗試了多種方法來更新現有的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>
如您所見,以上都不適合我。 我無法通過Google搜索找到其他建議。 您知道如何更新我的文檔嗎? 可能嗎?
一旦您這樣做:
col.find().to_a
# ^^^^
您正在使用一組簡單的Ruby散列,這些散列與數據庫沒有任何關系。 所以當你說:
doc.update({"ben": 5, "ams": 6})
您正在調用Hash#update
。 如果您要更新某些內容,則可以致電find
返回update
:
col.find.update(:$set => { 'ben' => 5, 'ams' => 6 })
或者如果您想替換整個文檔:
col.find.update('ben' => 5, 'ams' => 6)
通常,您通常會告訴您find
特定文檔。
請注意, update
僅更新它找到的第一個匹配的文檔,如果要更新所有匹配的文檔,則可以使用update_all
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.