You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Cosmos DB中查询完全匹配列与过滤器的项

Azure Cosmos DB 无序完全匹配数组与对象的查询方案

需求说明

需要查询Azure Cosmos DB中的文档,要求:

  • columns数组与目标数组无序完全匹配(元素完全一致、数量相同,无多余或缺失)
  • filters对象与目标对象无序完全匹配(键值对完全一致、键数量相同,无多余或缺失)
    最终仅返回示例1,排除示例2。

实现思路

1. 数组columns的匹配逻辑

通过两个核心条件实现无序完全匹配:

  • 数组长度相等,确保无多余/缺失元素
  • 原数组的每一个元素都存在于目标数组中,同时目标数组的每一个元素也都存在于原数组中(结合ARRAY_ALL和ARRAY_CONTAINS实现)

2. 对象filters的匹配逻辑

利用OBJECT_KEYS将对象转为键数组,再复用类似数组的匹配逻辑,同时验证键对应的值相等:

  • 对象的键数量相等,确保无多余/缺失键
  • 原对象的每一个键都存在于目标对象的键列表中,且对应的值完全一致

完整查询语句(参数化版本)

SELECT *
FROM f
WHERE 
    -- 匹配columns数组:长度相等 + 元素双向包含
    LEN(f.columns) = LEN(@newcolumns) 
    AND ARRAY_ALL(f.columns, c => ARRAY_CONTAINS(@newcolumns, c))
    -- 匹配filters对象:键数量相等 + 所有键存在且值匹配
    AND LEN(OBJECT_KEYS(f.filters)) = LEN(OBJECT_KEYS(@newfilters))
    AND ARRAY_ALL(OBJECT_KEYS(f.filters), k => 
        ARRAY_CONTAINS(OBJECT_KEYS(@newfilters), k) 
        AND f.filters[k] = @newfilters[k]
    )

参数说明

  • @newcolumns:目标数组,值为['banana','apple']
  • @newfilters:目标对象,值为{'truck':'blue', 'car':'red'}

效果验证

  • 示例1的columns长度为2,与目标数组长度一致,且所有元素双向包含;filters的键数量为2,所有键对应的值与目标对象完全匹配,因此会被返回。
  • 示例2的columns长度为3(目标数组长度为2),filters的键数量为3(目标对象键数量为2),均不满足长度相等的条件,因此会被过滤。

内容的提问来源于stack exchange,提问作者Dean MacGregor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:05:17