我正在使用bulkWrite操作(Java驱动程序3.12)将大量文档插入到Mongo DB中。在连接中断的情况下,我还实现了重试机制。
但是随后的重试中存在问题:由于在先前的尝试中插入了某些文档,因此后续的尝试会导致Duplicate Key error
@Autorwire
private ReactiveMongoOperations operations
operations
.execute(Document.class, collection ->
collection.bulkWrite(insertOneRequests, new BulkWriteOptions().ordered(false)
.bypassDocumentValidation(true)))
.retryWhen(Retry.any().fixedBackoff(Duration.ofMillis(backoffDuration)).retryMax(retryCount)
.doOnRetry(retryContext -> log.info("Retry"));
是否有一种方法可以在随后的重试中忽略“重复键错误”?
鉴于这并非不常见的情况,通常如何处理?假设在这种情况下,我试图避免使用“ Upsert”(替换)操作。
来自此:
“批量操作将尝试插入您提供的要插入的每个文档。如果文档已存在于集合中,则不会插入该文档(由于重复键错误),并且将尝试下一个文档的插入操作。请注意,将在所有提供的文档上尝试插入。“
MongoDB bulkwrite操作已经完成了我所期望的。只需要在我的报告中取消“重复键错误”。