如何使用数组字段过滤获取Cosmos DB完整文档?
Cosmos DB 查询数组过滤后返回完整文档的解决方案
你的问题出在查询的SELECT语句部分——你同时指定了返回完整文档c和匹配的数组元素t,所以结果会同时包含这两部分内容。要只获取完整文档,有两种常用方案:
方案1:使用EXISTS子查询(推荐)
这种方式直接检查文档的数组中是否存在符合条件的元素,无需JOIN,性能更优,且不会重复返回文档:
SELECT c FROM c WHERE EXISTS( SELECT VALUE t FROM t IN c.identifiers WHERE t.identifierLabel = "someLabel2" )
方案2:JOIN后仅返回文档并去重
如果坚持使用JOIN,只需修改SELECT语句只返回c,同时用DISTINCT避免因数组中多个匹配元素导致的重复文档:
SELECT DISTINCT c FROM c JOIN t IN c.identifiers WHERE t.identifierLabel = "someLabel2"
效果说明
两种方案都会返回符合条件的完整原始文档,不会额外追加匹配的数组元素,示例返回结果如下:
{ "name": { "productName": "someProductName" }, "identifiers": [ { "identifierCode": "1234", "identifierLabel": "someLabel1" }, { "identifierCode": "432", "identifierLabel": "someLabel2" } ] }
内容的提问来源于stack exchange,提问作者Noah
相关产品推荐
相关产品推荐

