使用ruby保存/更新(Moped)BSON :: Document

时间:2015-06-01 16:00:01

标签: ruby-on-rails mongodb mongoid moped

我尝试了很多方法来更新现有的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>

正如您所看到的,以上都不适用于我。谷歌搜索我找不到任何其他建议。你知道更新我的文件的方法吗?有可能吗?

1 个答案:

答案 0 :(得分:2)

一旦你这样做:

doc.update({"ben": 5, "ams": 6})

您正在处理与数据库无关的简单Ruby哈希数组。所以当你说:

col.find.update(:$set => { 'ben' => 5, 'ams' => 6 })
你打电话给Hash#update。如果您想更新某些内容,请致电update,了解find返回的内容:

col.find.update('ben' => 5, 'ams' => 6)

或者如果您想要替换整个文档:

find

您通常会告诉update您当然需要哪种特定文件。

请注意,db = dbHelper.getWritableDatabase(); Cursor c; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); actionBar.hide(); btnadd = (Button) findViewById(R.id.button); btnadd.setOnClickListener(this); dbHelper = new DBHelper(this); 仅更新找到的第一个匹配文档,如果您要更新所有匹配的文档,则使用update_all