azure-cosmosdb - 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 值。”
为什么针对分区集合的点查询需要提到分区键?
解决方案
PartitionKey 是强制性的,当您创建帐户时,系统会要求您提供 Partition Key。它用于分片,充当数据的逻辑分区,为 Cosmos DB 提供了分布数据的自然边界across partitions
。所以它伴随着设计。
因此,每当您使用 SDK 从 cosmosdb 查询数据时,都需要传递 PartitionKey
之所以需要 ParitionKey,是因为 CosmosDB 在找到数据之前不会解析查询。
推荐阅读
- python - 如何将 Python 3.7 包安装到 Docker?
- laravel-5 - Laravel - 在单独的视图中打开模式
- excel - Excel中空单元格的日期减法
- json - JSON“预期字符串未定义”错误
- jquery - jquery ui spinner 在使用类时不起作用
- javascript - NodeJS:TypeError:无法读取未定义的属性“json”
- python - 如何按最大日期时间过滤数据框中的行?
- android - Android unirest 库的问题 - Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier 类型的静态字段 INSTANCE
- angular - 使用 ng-bootstrap 将引导程序从 4.3.1 降级到 3.3.7
- python - 选择文件夹中的多个文件