Chr*_*sen 4 ruby ruby-on-rails mongodb mongoid
我有一个包含数百万Order文档的数据库。我用以下方法批量插入它们:
Order.collection.insert([
{:_id=>BSON::ObjectId('5471944843687229cdfb0000'), :status=>"open", :name=> "Benny"},
{:_id=>BSON::ObjectId('5471944843687229cdfc0000'), :status=>"open", :name=> "Allan"}
])
Run Code Online (Sandbox Code Playgroud)
我经常需要更新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"}
])
Run Code Online (Sandbox Code Playgroud)
仅供参考,这篇文章中可能有类似的问题/答案,但老实说我不遵循答案。
所引用问题中的最佳答案可以简化为
id_status = [['5471944843687229cdfb0000','closed'], ...]
bulk_order = id_status.map do |id, status| # Using array destructuration
{ update_one:
{
filter: { _id: id },
update: { :'$set' => {
status: status,
}}
}
}
end
YourCollection.collection.bulk_write(bulk_order)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7037 次 |
| 最近记录: |