我不知道怎么说这个。好吧,最近我在mongoid的rails项目上工作,我的任务是在Mongodb中插入多个记录。
假设在数据库中插入PartPriceRecord的多个记录。谷歌搜索后,我遇到了 collection.insert 命令:
PartPriceRecord.collection.insert(multiple_part_price_records)
但是在插入大量记录时,MongoDb似乎总是提示我错误信息:
超过最大插入大小16,000,000字节
谷歌搜索我发现单个文档的MongoDb的上限,但令人惊讶的是当我将上述查询更改为:
multiple_part_price_records.each do|mppr|
PartPriceRecord.create(mppr)
end
上述错误似乎不再出现。
任何人都可以深入解释这两者之间的区别究竟是什么?
谢谢
答案 0 :(得分:4)
单个批量插入的最大大小为16M字节。这就是你在第一个例子中想要做的事情。
在第二个示例中,您将单独插入每个文档。因此,每个插入都在插入的最大限制之下。
答案 1 :(得分:3)
@Kyle非常简洁地解释了他的答案的差异(+ 1),但至于你的问题的解决方案,你可能想看看批量插入:
BATCH_SIZE = 200
multiple_part_price_records.each_slice(BATCH_SIZE) do |batch|
PartPriceRecord.collection.insert(batch)
end
这会将记录分成200个批次(或任何最适合您情况的大小)并将其插入该限制内。这将比单独运行保存更快批次,这将向数据库发送更多请求。
关于collection.insert的一些快速注意事项:
as_document
轻松转换为文档。