我正在用MongoDB创建一个Web应用程序。 现在我正在创建管理页面,使管理员能够在网站上添加或删除项目。 在页面上,将添加批量导入功能,这样就可以从本地CSV文件导入内容。 问题是如何实现该功能。
最简单的方法是将上传的CSV文件转换为JSON,然后使用db.items.insert([{...}, {...}, ...])
语句插入它们。
如果null
返回db.getLastError()
,则导入成功。没问题。
但是,如果在批量插入期间发生错误,应该怎么做? 由于没有事务,因此无法回滚插入的项目。 因此,重试插入将导致重复的文档。
解决此问题的最佳方法是什么?
答案 0 :(得分:10)
与MongoDB 2.4一样,如果bulk insert中的任何文档出错,您将只获得最后一个异常。
如果您想要批量插入的事务方法(即所有插入必须成功或回滚批处理),那么您应该在插入的文档中包含一个标识字段,如batch_id
。如果发生任何故障,您可以删除从该批处理中插入的任何文档并相应地处理错误(重试或失败)。
如果您不插入分片群集:
ContinueOnError
标志设置为false,以确保批量插入在第一个错误如果您 插入分片群集:
ContinueOnError
标志目前始终设为true