【问题标题】:How to perform a batch update using Mongoid without finding first?如何在不先找到的情况下使用 Mongoid 执行批量更新?
【发布时间】:2014-04-08 09:18:18
【问题描述】:

我有一个这样的哈希数组:

[
  {
    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 执行批量更新而无需先获取它们?

【问题讨论】:

  • 不,重点是我知道我要更新的所有文档的id,而且我需要更新多个文档,所以我想找到一种方法来传递数据并拥有它作为一项高效的事务执行,而不是一次按顺序获取和更新一个文档。
  • 这不是重复的有什么原因吗?您似乎是在说您已经知道要插入的所有数据。 stackoverflow.com/questions/3772378/…
  • 其实不是你在谈论更新
  • 不是一个真正的答案,但等待 2.6 版本:docs.mongodb.org/master/reference/command/update/#dbcmd.update

标签: mongodb mongoid


【解决方案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 驱动程序的新版本。

【讨论】:

  • 它仍然不存在...我正在使用 mongoid 5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
相关资源
最近更新 更多