如何在 Mongo + Rails 中插入多个?
How to upsert many in Mongo + Rails?
每天,我都有一个 500mb 的文件需要解析并保存到数据库中。
当数据库清晰时,insert_many
适合我。
Device.collection.insert_many(devices, ordered=false)
devices
是一个数组:
[ {id:"111", type:"aaa"},
{id:"222", type:"bbb"},
{id:"333", type:"ccc"} ]
但是,数组中的某些类型可能每天都在变化。数组长度也可以改变。
问题,如何使用 Mongoid 执行 upsert_many?如果 ID 匹配,请根据需要进行更新。如果没有找到 id,保存新文档。
谢谢。
据我所知,最有效的方法是通过驱动程序的批量写入 API。
将 update_one
与 upsert: 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 限制或出于性能原因。
每天,我都有一个 500mb 的文件需要解析并保存到数据库中。
当数据库清晰时,insert_many
适合我。
Device.collection.insert_many(devices, ordered=false)
devices
是一个数组:
[ {id:"111", type:"aaa"},
{id:"222", type:"bbb"},
{id:"333", type:"ccc"} ]
但是,数组中的某些类型可能每天都在变化。数组长度也可以改变。
问题,如何使用 Mongoid 执行 upsert_many?如果 ID 匹配,请根据需要进行更新。如果没有找到 id,保存新文档。
谢谢。
据我所知,最有效的方法是通过驱动程序的批量写入 API。
将 update_one
与 upsert: 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 限制或出于性能原因。