如何在MongoDB中进行大容量插入时从错误中恢复
我正在使用MongoDB创建一个web应用程序。 现在我正在创建管理员页面,管理员可以在网站上添加或删除项目。 在页面上,将添加批量导入功能,从而可以从本地CSV文件导入内容。 问题是如何实现该特性 最简单的方法是将上传的CSV文件转换为JSON,然后使用如何在MongoDB中进行大容量插入时从错误中恢复,mongodb,Mongodb,我正在使用MongoDB创建一个web应用程序。 现在我正在创建管理员页面,管理员可以在网站上添加或删除项目。 在页面上,将添加批量导入功能,从而可以从本地CSV文件导入内容。 问题是如何实现该特性 最简单的方法是将上传的CSV文件转换为JSON,然后使用db.items.insert([{…},{…},…])语句插入它们 如果db.getLastError()返回null,则导入成功。没问题 但是,如果在大容量插入过程中发生错误,应该怎么做? 由于没有事务,因此无法回滚插入的项。 因此,重试插
db.items.insert([{…},{…},…])
语句插入它们
如果db.getLastError()
返回null
,则导入成功。没问题
但是,如果在大容量插入过程中发生错误,应该怎么做?
由于没有事务,因此无法回滚插入的项。
因此,重试插入将导致重复的文档
解决此问题的最佳方法是什么?与MongoDB 2.4一样,只有当文件中的任何文档出现错误时,才会出现最后一个异常 失败后的倒退 如果您希望对批量插入采用事务性方法(即所有插入必须成功,或回滚批),则应在插入的文档中包含一个标识字段,如
batch\u id
。在出现任何故障时,您可以删除从该批中插入的任何文档,并适当地处理错误(重试或失败)
批量插入法
如果要而不是插入分片群集:
- 将
标志设置为false,以确保批量插入在第一个错误时停止ContinueOnError
- 处理异常并决定是回滚批处理还是从导致异常的文档后的文档开始重新插入
标志当前始终设置为trueContinueOnError
- 出现错误时,您必须循环该批中的文档,并尝试单独插入(或)它们,以便捕获和处理任何特定的异常李>
- 另见:
ContinueOnError
指定为true
,并查看哪些写入失败(而不仅仅包括批处理的最后一个错误)。ContinueOnError
似乎已被弃用。现在如何处理bulkOps中的错误?散货船是否完全停止或继续进行其他操作?请参阅