Azure Cosmos DB嵌套数组查询:如何筛选含test-1标签的记录
Azure Cosmos DB嵌套数组查询解决方案
针对你的需求,这里提供两种常见场景的查询写法:
1. 查询包含目标标签的完整文档
如果需要找出所有**存在Fees子项且其Tags包含"test-1"**的完整文档,可使用EXISTS结合子查询遍历嵌套数组:
SELECT * FROM c WHERE EXISTS( SELECT VALUE f FROM f IN c.Fees WHERE ARRAY_CONTAINS(f.Tags, "test-1") )
2. 仅提取Fees数组中符合条件的元素
如果只需要获取Fees数组里那些Tags包含"test-1"的子项,有两种实现方式:
方式一:直接返回符合条件的Fees子项
SELECT f FROM c JOIN f IN c.Fees WHERE ARRAY_CONTAINS(f.Tags, "test-1")
方式二:保留原文档结构,仅过滤Fees数组
如果需要保留文档的其他字段(如id、PartitionKey),同时只保留符合条件的Fees元素:
SELECT c.id, c.PartitionKey, ARRAY( SELECT VALUE f FROM f IN c.Fees WHERE ARRAY_CONTAINS(f.Tags, "test-1") ) AS Fees FROM c WHERE EXISTS( SELECT VALUE f FROM f IN c.Fees WHERE ARRAY_CONTAINS(f.Tags, "test-1") )
关键函数说明
ARRAY_CONTAINS:用于检查数组是否包含指定元素,这里用来判断单个Fees项的Tags数组是否存在"test-1"EXISTS:通过子查询判断是否存在符合条件的Fees项,用于筛选目标文档JOIN:展开嵌套的Fees数组,允许单独处理每个数组元素ARRAY():将子查询结果重新组合为数组,实现对原Fees数组的过滤
内容的提问来源于stack exchange,提问作者duyn9uyen
相关产品推荐
相关产品推荐

