无法在 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 转换为中文字符.
唯一的解决方法是在创建文档时使用英文作为分区键。
我正在尝试使用 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 转换为中文字符.
唯一的解决方法是在创建文档时使用英文作为分区键。