簡體   English   中英

用紅寶石保存/更新(輕便)BSON :: Document

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM