Azure Cosmos DB Core API点读取如何获取指定子文档?
解决Azure Cosmos DB NodeJS API点读取仅获取特定字段的问题
item.read()方法的设计初衷就是返回完整文档,即使传入SELECT语句也不会生效,这就是你拿到全量文档的原因。要在保证低RU和低延迟的前提下只读取map字段,需要用带分区键的精准查询来实现:
正确实现代码
// 替换为你实际的分区键字段名,比如如果分区键是"email"就写"c.email" const querySpec = { query: "SELECT c.map FROM c WHERE c.id = @id AND c.email = @pk", parameters: [ { name: "@id", value: email }, { name: "@pk", value: email } ] }; // 指定partitionKey让查询路由到对应分区,性能接近点读取 const { resources } = await container.items.query(querySpec, { partitionKey: email }).fetchNext(); // 提取map字段值 const targetMapValue = resources[0]?.map; console.log(targetMapValue);
关键说明
- 通过
partitionKey选项指定分区,确保查询只在目标分区执行,RU消耗和延迟与点读取几乎一致 - 使用
SELECT c.map做投影,仅返回需要的字段,避免传输全量文档 - WHERE条件同时匹配
id和分区键,精准定位到唯一文档
内容的提问来源于stack exchange,提问作者AuWiMo
相关产品推荐
相关产品推荐

