我知道我们可以用mongodb批量更新文件
db.collection.update( criteria, objNew, upsert, multi )
Run Code Online (Sandbox Code Playgroud)
在一个db调用中,但它是同类的,即所有受影响的文档都遵循一种标准.但我想做的就是这样
db.collection.update([{criteria1, objNew1}, {criteria2, objNew2}, ...]
Run Code Online (Sandbox Code Playgroud)
,发送多个更新请求,可以在单个db调用中更新可能完全不同的文档或文档类.
我想在我的应用程序中做的是插入/更新一堆具有复合主键的对象,如果该键已经存在,则更新它; 否则插入它.
我可以在mongodb的一个组合中完成所有这些吗?
我知道Mongoid v3 +支持批量插入Model.collection.insert().但是,我不认为它支持批量更新,其中每个记录的属性不同(所以我认为update_all也不会).有没有办法进行批量更新/ upsert而不是单记录查找和更新?
这是一个简化的例子,我有2个模型:
class Product
...
has_and_belongs_to_many :lists
end
class List
...
has_and_belongs_to_many :products
end
Run Code Online (Sandbox Code Playgroud)
Product创建new时,我将其与一个或多个相关联Lists.但是,我还需要Product每天更新属性而不会丢失List参考信息(我确定验证Product不会运行).
一种方法,不使用批处理,是调用find_or_initialize_by上Product和更新的属性.但对10K-1M +记录这样做是非常耗时的.
使用批量插入的另一种方法是做Product.delete_all,然后Product.collection.insert(...),但是这会产生新的,product_ids并且List不再保持与之的关系.
在这个例子中有没有办法进行批量更新或upsert?