Rails - mongoid - 使用密钥创建和覆盖?

时间:2017-01-20 11:01:45

标签: ruby-on-rails ruby mongodb ruby-on-rails-4 mongoid

我想知道是否有更简单(和更快)的可能性,通过查看密钥来创建/覆盖我的mongo数据库中的项目。

让我解释一下:

$('#smartsearch').on('select2:unselecting', function (e) {
    alert('You clicked on X');
});

所以这是我的对象

今天,我需要以非常快的方式(经常)修改很多这些对象来更新data_table

今天我这样做:

MyObject:

   #<MyObject _id: 5881e885049490276d1d85b9,
    data_table: [...],
    my_key: "test">

但我觉得我失去了很多表演,对吗?

我可以像使用ct = MyObject.where(my_key: "test").first ct.update_attributes(data_table: data) 键创建或覆盖项目一样create or update进行操作吗?

或其他改善表现的想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

MyObject.find_or_create_by(my_key: "test").update_attributes(data_table: data)

在这种情况下,没有任何来自mongo端的性能优化,它将再次查询db,如果没有找到将创建一个新记录并将更新它 - 只需一行。

如果您不需要在模型上运行验证,则可以使用update_attributes替换set