如何在 Mongo + Rails 中插入多个?

How to upsert many in Mongo + Rails?

每天,我都有一个 500mb 的文件需要解析并保存到数据库中。

当数据库清晰时,insert_many 适合我。

Device.collection.insert_many(devices, ordered=false)
[ {id:"111", type:"aaa"},
  {id:"222", type:"bbb"},
  {id:"333", type:"ccc"} ]

但是,数组中的某些类型可能每天都在变化。数组长度也可以改变。

问题,如何使用 Mongoid 执行 upsert_many?如果 ID 匹配,请根据需要进行更新。如果没有找到 id,保存新文档。

谢谢。

据我所知,最有效的方法是通过驱动程序的批量写入 API。

update_oneupsert: true 一起使用:https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-bulk-operations/#update-one

给定你的 devices 数组,我将 map 每个元素进行批量写入操作,该操作通过数组元素中的 id 找到并设置属性,upsert: true.然后将这些批量操作提供给 Collection#bulk_write。您可能需要将整个 devices 数组分成多个块,以保持在 BSON 文档的 16 MB 限制或出于性能原因。