如何使用Mongoid执行批量更新而不先找到?

时间:2014-03-06 00:45:48

标签: mongodb mongoid

我有一系列像这样的哈希:

[
  {
    id: 123,
    color: 'red'
  },
  {
    id: 456,
    color: 'green'
  }
]

我知道如何一次获取和更新一个:

params[:my_documents].each do |doc|
  MyDocument.find(doc[:id]).update_attributes(color: doc[:color])
end

...但我怀疑表现不是很好。我想找到一种方法,我可以直接将数据传递给Mongoid / MongoDB,这样我就可以更新每个文档,而无需查找和实例化每个文档,以便更新几个字段。

如何使用Mongoid执行批量更新而无需先获取它们?

1 个答案:

答案 0 :(得分:1)

mongo-ruby-driver 1.10版(gem'mongo','〜> 1.10.0')支持批量写入操作。对于您的示例,当与2.6 MongoDB服务器一起使用时,可以将一批更新作为一个请求提交,以获得显着的性能提升。

https://github.com/mongodb/mongo-ruby-driver/wiki/Bulk-Write-Operations

Mongoid尚未提供批量写入操作,但计划在未来版本中基于新版本的“mongo”Ruby驱动程序。