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

使用PowerShell调用Azure Cosmos DB API遇分区键错误如何解决?

解决无分区键Cosmos DB容器的PowerShell API调用问题

你的容器属于预分区时代创建的无分区键容器,迁移后Azure后台自动关联了虚拟的/_partitionKey分区键,但实际文档无此字段,此时调用API需避开分区键头的强制校验,以下是具体操作方案:

1. 读取文档(GET请求)

读取单文档

直接通过文档ID的完整路径调用,无需指定任何分区键头:

$cosmosEndpoint = "https://your-account.documents.azure.com:443/"
$cosmosKey = "your-primary-key"
$databaseId = "your-db"
$containerId = "your-container"
$documentId = "target-doc-id"

$headers = @{
    "Authorization" = "type=master&ver=1.0&sig=$cosmosKey"
    "x-ms-date" = (Get-Date).ToUniversalTime().ToString("r")
    "x-ms-version" = "2021-05-15" # 使用兼容的API版本
}

$uri = "$cosmosEndpoint/dbs/$databaseId/colls/$containerId/docs/$documentId"

Invoke-RestMethod -Uri $uri -Headers $headers -Method Get

查询全量文档

需添加跨分区查询头,无需分区键参数:

$queryUri = "$cosmosEndpoint/dbs/$databaseId/colls/$containerId/docs"
$queryHeaders = $headers.Clone()
$queryHeaders["x-ms-documentdb-query-enablecrosspartition"] = "true"
$queryHeaders["Content-Type"] = "application/query+json"

$body = @{
    query = "SELECT * FROM c"
} | ConvertTo-Json

Invoke-RestMethod -Uri $queryUri -Headers $queryHeaders -Method Post -Body $body

2. 创建/更新文档(POST/PUT请求)

创建或更新时无需指定任何分区键头,后台会自动处理虚拟分区键逻辑:

创建文档

$createUri = "$cosmosEndpoint/dbs/$databaseId/colls/$containerId/docs"
$createHeaders = $headers.Clone()
$createHeaders["Content-Type"] = "application/json"

$newDoc = @{
    id = "new-doc-001"
    otherProperty = "test value"
} | ConvertTo-Json

Invoke-RestMethod -Uri $createUri -Headers $createHeaders -Method Post -Body $newDoc

更新文档

需指定完整文档路径并携带ETag做并发校验:

$updateUri = "$cosmosEndpoint/dbs/$databaseId/colls/$containerId/docs/update-doc-001"
$updateHeaders = $headers.Clone()
$updateHeaders["Content-Type"] = "application/json"
$updateHeaders["x-ms-documentdb-etag"] = "\"your-doc-etag\"" # 从GET请求结果中获取ETag

$updatedDoc = @{
    id = "update-doc-001"
    otherProperty = "updated value"
} | ConvertTo-Json

Invoke-RestMethod -Uri $updateUri -Headers $updateHeaders -Method Put -Body $updatedDoc

关键注意事项

  • 禁止添加任何分区键头(x-ms-partitionkey或x-ms-documentdb-partitionkey),虚拟分区键由后台自动维护,无需手动指定。
  • 必须使用2021-05-15及以上版本的API,旧版本会错误强制要求分区键参数。
  • 确保密钥拥有对应操作权限(如文档读写、元数据读取等),避免权限校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:20:16