4

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

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

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

但是,如果在批量插入过程中发生错误应该怎么办?因为没有事务,所以插入的项不能回滚。因此,重试插入将导致重复的文档。

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

4

1 回答 1

10

在 MongoDB 2.4 中,如果批量插入中的任何文档出现错误,您只会得到最后一个异常。

失败时回滚

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

批量插入方法

如果您没有插入分片集群:

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

如果要插入分片集群:

  • ContinueOnError标志当前始终设置为 true
  • 如果出现错误,您将不得不遍历该批次中的文档并尝试单独插入(或upsert)它们,以便您可以捕获和处理任何特定异常。
  • 另请参阅:批量插入分片集合的策略
于 2013-04-26T11:44:27.797 回答