首页 > 解决方案 > Cosmos DB - 为什么在使用 sql api SDK 进行点查询时必须提到分区键?

问题描述

为什么在使用 sql api SDK 对分区集合进行点查询时必须提到分区键?

有没有办法使用 sql api SDK 对分区集合执行点查询而不提及“PartitionKey”?因为它是点查询。

工作示例:
// - db_id 是数据库的 ID 属性 // - coll_id 是
DocumentCollection 的 ID 属性
// - doc_id 是希望读取的文档的 ID 属性。
var docUri = UriFactory.CreateDocumentUri("db_id", "coll_id", "doc_id");
等待 docClient.ReadDocumentAsync(docUri, new RequestOptions { PartitionKey = new PartitionKey(actualId) });

非工作示例: var docUri = UriFactory.CreateDocumentUri("db_id", "coll_id", "doc_id");
等待 docClient.ReadDocumentAsync(docUri);

以下没有分区键的查询失败并显示错误消息:“必须为此操作提供 PartitionKey 值。”

为什么针对分区集合的点查询需要提到分区键?

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


PartitionKey 是强制性的,当您创建帐户时,系统会要求您提供 Partition Key。它用于分片,充当数据的逻辑分区,为 Cosmos DB 提供了分布数据的自然边界across partitions。所以它伴随着设计。

因此,每当您使用 SDK 从 cosmosdb 查询数据时,都需要传递 PartitionKey

之所以需要 ParitionKey,是因为 CosmosDB 在找到数据之前不会解析查询。


推荐阅读