使用 SpringData 检查 mongo 中是否存在实体,在多文档事务中抛出异常计数是不允许的

Check if entity exists in mongo with SpringData throws exception count is not allowed in multi document transaction

我使用 springData 和 mongo 4.6。我开始一个事务,更新一个集合中的一个文档,然后我需要检查另一个集合中的另一个文档是否存在。

@Transaction
someService() {
     Object res1 = someService1DocuemntUpdate();
     // It fails here.
     boolean exists = anotherObjectRepository.exists(anotherObjectId);
     if (exists) {
         process(res1);
     }
}

然后我得到

com.mongodb.MongoCommandException: Command failed with error 50851 (Location50851): 'Cannot run 'count' in a multi-document transaction.

存在操作优于计数操作。 Count 在 multi-document 笔交易中有限制 以下文档描述了解决方法 https://docs.mongodb.com/manual/core/transactions/#count-operation

最简单的解决方法是使用 findBy.. != null 更聪明的解决方法是编写聚合请求。