【发布时间】:2018-11-27 01:45:58
【问题描述】:
我有一个包含数百万 Orderdocuments 的数据库。我用以下方法批量插入它们:
Order.collection.insert([
{:_id=>BSON::ObjectId('5471944843687229cdfb0000'), :status=>"open", :name=> "Benny"},
{:_id=>BSON::ObjectId('5471944843687229cdfc0000'), :status=>"open", :name=> "Allan"}
])
我经常需要更新订单上的status 属性。使用update_attribute 方法单独更新它们会效率低下。
如何批量更新多个 MongoDB 文档?
可以用以下“虚构”代码最好地描述所需的解决方案:
# IMPORTANT: The exemplified upsert method does not exist
Order.collection.upsert([
{:_id=>BSON::ObjectId('5471944843687229cdfb0000'), :status=>"closed"},
{:_id=>BSON::ObjectId('5471944843687229cdfc0000'), :status=>"some_other_status"}
])
仅供参考,可能有类似的问题/答案in this SO post,但老实说,我没有遵循答案。
【问题讨论】:
-
链接问题中的答案给出了一个很长的示例,但您要理解(并向后工作)的关键是:“{ update: Product.collection_name.to_s, updates: updates, ordered : false }" 这是一个更新命令,它需要多个更新指令。 “updates”参数是要进行更新的列表 - 向后查看代码以查看该批更新是如何构建的。
-
嗨@AsyaKamsky,你能把它作为这个问题的更简短的答案吗?我只有 2 天的时间来奖励答案。
标签: ruby-on-rails ruby mongodb mongoid