带有AWS DocumentDB findAll的Spring Data Mongo抛出异常



我的团队在从常规MongoDB服务器迁移到AWS DocumentDB时遇到了一个问题。

基本上DocumentDB不支持事务中的游标,这对我们来说是个问题

当在事务中从集合中找到超过102个文档时,会导致异常。我不知道为什么它是102,但它恰好是造成我问题的文档数量,任何低于这个数量的都可以,任何超过这个数量的东西都会导致

org.springframework.data.mongodb.UncategorizedMongoDbException: Query failed with error code 303 and error message 'Feature not supported: cursor within transaction. Try increasing the batchsize.'

知道如何解决这个问题吗?我首先想到的是在交易中找不到文件,但我宁愿把它作为最后的选择。

以下是您可以复制的文件:

MongoTransactionApplication.java

application.yaml

pom.xml

编辑:一开始忘记提到这一点,但Mongo和DocumentDB服务器都是4.0版

由于这是一个不受支持的功能,我想一个解决方案可能是重新构建代码(如果可能的话(,以便在事务开始之前完成findAll操作。

如果这不可行,可以使用存储库界面中查询方法上的@Meta(cursorBatchSize = 1000)注释来增加批量大小。

如果你正在进行编程查询,你也可以在使用org.springframework.data.mongodb.core.query.Query方法和MongoTemplate构建查询时设置它,类似于这样(Kotlin风格,但我认为你已经明白了(:

mongoTemplate.find(query(where("id").`in`(ids)).cursorBatchSize(1000), TheDocument::class.java, 'collection_name`)

最新更新