gpt4 book ai didi

api - Cosmos DB 的分区键

转载 作者:行者123 更新时间:2023-12-03 00:36:03 24 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 和 Cosmos DB 构建一个 Restful API。有一个 GetItemById 请求需要分区键。

 public static async Task<T> GetItemAsync(string itemId, string name)
{
try
{
Document document =
await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, itemId),
new RequestOptions() { PartitionKey = new PartitionKey(name) });

return (T)(dynamic)document;
}
catch (DocumentClientException e)
{
if (e.StatusCode == System.Net.HttpStatusCode.NotFound)
{
return null;
}
else
{
throw;
}
}
}

GetByIdAsync() 函数调用此 GetItemAsync() 方法。

    [HttpGet("{itemId}")]
public async Task<IActionResult> GetByIdAsync(string itemId, string name)
{
var item = await DocumentDBRepository<TodoItem>.GetItemAsync(itemId, name);
if (item == null)
{
return NotFound();
}
return new ObjectResult(item);
}

URL 为 http://localhost:54084/api/todo/f323307b-142f-46f3-9072-12f41cc74e87

我的 Azure CosmosDB 容器如下所示: enter image description here

但是当我运行这个时,它给了我一个错误

{Microsoft.Azure.Documents.DocumentClientException: Partition key provided either doesn't correspond to definition in the collection or doesn't match partition key field values specified in the document.

最佳答案

在 Cosmos DB 中,主键是分区键和行键(“id”)的组合。两者的组合唯一地标识一行——而不是单独的“id”。因此,您需要指定分区键中Name的值来查找该项目(不为空)。

如果您的应用没有自然的 PK,那么您应该考虑将“/id”设置为分区键(并传递 id 和分区键的值)

关于api - Cosmos DB 的分区键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com