使用Bicep创建Azure Cosmos DB for MongoDB时遇SQL API不支持错误
解决Azure Cosmos DB for MongoDB账户创建库/容器时的API不支持错误
这个错误的核心原因很明确:你创建数据库或容器时,用了SQL API专属的Bicep资源类型,但你的Cosmos账户是MongoDB API类型的,两者完全不兼容,所以会抛出“SQL请求不被支持”的提示。
用对MongoDB API对应的资源类型
针对MongoDB类型的Cosmos账户,必须用以下Bicep资源类型来创建库和容器:
- 数据库:
Microsoft.DocumentDB/databaseAccounts/mongodbDatabases - 容器(集合):
Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections
修正后的完整示例代码
1. 创建MongoDB API的Cosmos账户
resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = { name: 'your-cosmos-account' location: resourceGroup().location properties: { databaseAccountOfferType: 'Standard' locations: [ { locationName: resourceGroup().location failoverPriority: 0 } ] apiProperties: { serverVersion: '4.0' // 可根据需求选3.6/4.0/4.2/5.0版本 } } }
2. 创建MongoDB数据库
resource mongoDb 'Microsoft.DocumentDB/databaseAccounts/mongodbDatabases@2023-04-15' = { parent: cosmosAccount name: 'mongo-demo-db' properties: { resource: { id: 'mongo-demo-db' } options: { throughput: 400 // 固定吞吐量,也可以换成自动缩放配置 } } }
3. 创建MongoDB集合(容器)
resource mongoCollection 'Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections@2023-04-15' = { parent: mongoDb name: 'demo-collection' properties: { resource: { id: 'demo-collection' shardKey: { 'user_id': 'Hash' // 按需设置分片键,无分片需求可省略 } indexes: [ { key: { keys: ['_id'] } } ] } options: { throughput: 400 } } }
额外注意事项
- 绝对不能用
sqlDatabases或sqlContainers这类SQL API的资源类型,它们只适用于SQL版Cosmos账户。 - 确认账户的
apiProperties.serverVersion已经正确配置,确保账户确实是MongoDB API类型。 - 资源的父子关系要对应:数据库必须挂在MongoDB账户下,容器必须挂在对应的MongoDB数据库下。
内容的提问来源于stack exchange,提问作者chandu
相关产品推荐
相关产品推荐

