如何在MongoDB中批量插入期间从错误中恢复

时间:2013-04-25 09:15:14

标签: mongodb

我正在用MongoDB创建一个Web应用程序。 现在我正在创建管理页面,使管理员能够在网站上添加或删除项目。 在页面上,将添加批量导入功能,这样就可以从本地CSV文件导入内容。 问题是如何实现该功能。

最简单的方法是将上传的CSV文件转换为JSON,然后使用db.items.insert([{...}, {...}, ...])语句插入它们。

如果null返回db.getLastError(),则导入成功。没问题。

但是,如果在批量插入期间发生错误,应该怎么做? 由于没有事务,因此无法回滚插入的项目。 因此,重试插入将导致重复的文档。

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:10)

与MongoDB 2.4一样,如果bulk insert中的任何文档出错,您将只获得最后一个异常。

回滚失败

如果您想要批量插入的事务方法(即所有插入必须成功或回滚批处理),那么您应该在插入的文档中包含一个标识字段,如batch_id。如果发生任何故障,您可以删除从该批处理中插入的任何文档并相应地处理错误(重试或失败)。

批量插入方法

如果您插入分片群集:

  • ContinueOnError标志设置为false,以确保批量插入在第一个错误
  • 上停止
  • 处理异常并决定是否回滚批处理或在导致异常的文档之后从文档重新插入

如果您 插入分片群集: