Cosmos DB .Net Core-阅读文档-不支持的ParitionKey值

时间:2019-07-12 19:37:52

标签: .net-core azure-cosmosdb azure-cosmosdb-sqlapi

我尝试从nuget中使用Microsoft.Azure.DocumentDB.Core包中的.Net Core尝试检索项目时,通过包含PartitionKey并使用以下方法e,g找到了如何从cosmos db读取项目的过时文档。 :

public static async Task<T> GetItemAsync(string id, string category)
{
     await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, id),new RequestOptions { PartitionKey = new PartitionKey(category) });
}

那么参数类别代表什么?它应该代表特定项目的分区键的值还是仅仅是该收集项目的分区键的格式?

如果我的分区键未定义,我尝试使用Undefined.Value作为分区键选项,但分区键不符合集合中的定义或不符合定义匹配文档中指定的分区键字段值。

new RequestOptions { PartitionKey = new PartitionKey(Undefined.Value) });

此外,为什么从集合中检索单个项目时我们既需要id值又需要分区键?为什么我们不能只使用id作为唯一键?如果我不知道分区键,是否仍然可以使用ReadDocumentAsync方法来获取我的物品?

1 个答案:

答案 0 :(得分:0)

在Cosmos DB中,id不是带有分区集合的唯一值。实际上,只要分区键值不同,就可以拥有id完全相同的无限文档。这是因为文档id仅在其自己的分区中是唯一的。

示例中category所代表的是该文档预期存在的分区键值。您需要分区集合中的分区键值才能读取文档。这就是Cosmos DB这么快的原因。如果您的分区键也是您的ID,那么该ID在集合中将是唯一的,因为每个文档都将位于不同的逻辑分区中。