You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB MongoDB API4.0多文档事务报错Transaction is not active求助

Azure Cosmos DB MongoDB API 4.0 多文档事务报错排查

场景与代码

我正在测试多文档事务的简单用例,使用Azure Cosmos DB MongoDB API 4.0,通过MongoRepository接口实现事务功能,示例代码如下:

@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
public void saveData() {

  repoType1.insert(MyType1.builder().id("1").build());

  repoType1.insert(MyType1.builder().id("2").build());

  // 不同集合的文档
  repoType2.insert(MyType2.builder().id("1234567").build());

  if (true) {
    throw new RuntimeException("should rollback everything!");
  }

  repoType1.insert(
      MyType1.builder().id("3").build());
}


@Bean
MongoTransactionManager mongoTransactionManager(MongoDatabaseFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
}

@Repository
@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
public interface MyType1Repository
    extends MongoRepository<MyType1, String> {
}

@Repository
@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
public interface MyType2Repository
    extends MongoRepository<MyType1, String> {
}

遇到的错误

com.mongodb.MongoCommandException: Command failed with error 2
(BadValue): 'Error=2, Details='Response status code does not indicate
success: BadRequest (400); Substatus: 1101; ActivityId:
6645fc9e-2c26-4c4a-841d-4a1236b1b7b6; Reason: (Message:
{"Errors":["Transaction is not active"]} ActivityId:
6645fc9e-2c26-4c4a-841d-4a1236b1b7b6, Request URI:
/apps/42c66b5d-4a29-4cc3-8eec-6f40b63129b6/services/102e98fc-69a2-45fe-8b26-4a5ed4c052af/partitions/941605a6-2524-48c2-9937-b518ca9b477e/replicas/133108113341839198p/,
RequestStats:
Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum,
SDK: Windows/10.0.19041 cosmos-netstandard-sdk/3.18.0);' on server
cosmos-core-midware-test-001-westeurope.mongo.cosmos.azure.com:10255.
The full response is {"ok": 0.0, "errmsg": "Error=2, Details='Response
status code does not indicate success: BadRequest (400); Substatus:
1101; ActivityId: 6645fc9e-2c26-4c4a-841d-4a1236b1b7b6; Reason:
(Message: {"Errors":["Transaction is not active"]}\r\nActivityId:
6645fc9e-2c26-4c4a-841d-4a1236b1b7b6, Request URI:
/apps/42c66b5d-4a29-4cc3-8eec-6f40b63129b6/services/102e98fc-69a2-45fe-8b26-4a5ed4c052af/partitions/941605a6-2524-48c2-9937-b518ca9b477e/replicas/133108113341839198p/,
RequestStats:
Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum,
SDK: Windows/10.0.19041 cosmos-netstandard-sdk/3.18.0);", "code": 2,
"codeName": "BadValue"}

测试情况与疑问

经测试,仅插入单个文档时事务可正常运行。请问这是否为MongoDB API版本问题?升级至4.2是否会有所改善?我已知分片集合不支持多文档事务,但不清楚无需分片的数据库实例情况,且认为官方文档对此说明不足。


解答

  • API版本限制:Azure Cosmos DB MongoDB API 4.0仅支持单集合内的多文档事务,跨集合的多文档事务在该版本下不被支持,这就是你跨集合插入时报错的核心原因。
  • 升级至4.2的作用:升级到MongoDB API 4.2后,非分片实例支持同数据库下的跨集合多文档事务,你的测试场景就能正常运行。
  • 非分片实例的事务支持:非分片的Cosmos DB MongoDB API实例中,4.0版本仅支持单集合多文档事务;4.2及以上版本可支持同库跨集合的多文档事务。分片集合无论哪个版本都不支持多文档事务。
  • 代码修正点:你的MyType2Repository泛型声明错误,应该是MongoRepository<MyType2, String>,这个问题可能引发额外异常,建议优先修正。

内容的提问来源于stack exchange,提问作者solujic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:50:23