无法在 Azure Cosmos DB 的分区键 header 中用中文单词替换项目

Unable to replace item with chinese word in partition key header in Azure Cosmos DB

我正在尝试使用 golang 在 Azure Cosmos db 中使用 github.com/vippsas/go-cosmosdb 包进行 CURD 操作。

一切正常,除了尝试创建、用中文字符替换 x-ms-documentdb-partitionkey 中的文档。

文档示例数据,分区键为/method

{
 "id": "9289b3f5-5830-4589-ab7d-6c0efbb4150e",
 "method": "日",
 "endpoint": "/api/savecsv?operator=jimmylin",
 "operator": "jimmy",
 "execTime": 1622867229,
 "payload": "abc.json"
}

这是我的代码:

    client := cosmosapi.New()
    _, _, err = client.CreateDocument(ctx, "dbid", "contid", &log, cosmosapi.CreateDocumentOptions{PartitionKeyValue: log.Method})
    if err != nil {
        err = tracerr.New(err.Error())
        tracerr.PrintSourceColor(err, 2)
    }

我还打印了在 /vippsas/go-cosmosdb 包中处理的分区键。输出是:

x-ms-documentdb-partitionkey:["日"]

这是我遇到的错误:

The JSON, SQL, or JavaScript in the request body is invalid

如果我把 /method 改成英文,就可以正常工作了。

如果我使用 JS SDKs 也可以正常工作(汉字分区键)。

我相信 JS SDK 或我使用的包都是基于 Azure Cosmos DB Restful API 的。 我觉得这个包裹可能少了什么。

Azure Cosmos db 仅支持 x-ms-documentdb-partitionkey 中的 Unicode 或 ASCII,而 github.com/vippsas/go-cosmosdb 包使用 json.Marshal,它在内部自动将 Unicode 转换为中文字符.

唯一的解决方法是在创建文档时使用英文作为分区键。