2017-01-20 89 views
3

我想知道是否有任何简单(和更快)的可能性通过查看一个键来创建/覆盖我的mongo数据库中的一个项目。Rails - mongoid - 使用键创建和覆盖?

让我解释一下:

MyObject: 

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

,所以这是我的对象

今天,我需要修改很多论文在一个非常快速的方式对象(经常)更新data_table

今天我在做:

ct = MyObject.where(my_key: "test").first    
ct.update_attributes(data_table: data) 

但是我觉得我输了很多表演吧?

有一种方法可以像create or update那样使用密钥my_key创建或覆盖物品?

或其他任何想法来提高性能?

谢谢!

回答

0

试试这个:

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

在这种情况下,没有从蒙戈端的任何性能优化,它会再次查询数据库,如果没有找到将创造一个新的记录,将更新它 - 只要在同一行。

如果您不需要在模型上运行验证,则可以使用set代替update_attributes,这将进行另一项优化。