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

Azure Cosmos DB数组非严格匹配查询方法咨询

Azure Cosmos DB 数组非严格匹配查询方法

针对你遇到的ARRAY_CONTAINS仅支持严格匹配的问题,以下几种方法可以实现大小写不敏感的非严格匹配:

方法一:使用ARRAY_EXISTS结合大小写转换

利用内置函数ARRAY_EXISTS配合lambda表达式,直接检查数组中是否存在满足大小写转换后匹配的元素,写法简洁且性能较好:

SELECT u.id 
FROM users u
WHERE ARRAY_EXISTS(u.category, c => LOWER(c) = LOWER('Mongo'))

方法二:ARRAY JOIN配合去重

通过JOIN展开数组元素,统一转换大小写后匹配,再用DISTINCT避免重复结果:

SELECT DISTINCT u.id 
FROM users u
JOIN c IN u.category
WHERE LOWER(c) = LOWER('Mongo')

方法三:自定义UDF(用户定义函数)

创建一个封装非严格数组包含逻辑的UDF,方便复用:

  1. 创建UDF(JavaScript):
function arrayContainsCaseInsensitive(array, searchValue) {
    if (!array || !searchValue) return false;
    const lowerSearch = searchValue.toLowerCase();
    return array.some(item => item.toLowerCase() === lowerSearch);
}
  1. 调用UDF查询:
SELECT u.id 
FROM users u
WHERE udf.arrayContainsCaseInsensitive(u.category, 'Mongo')

性能优化建议

如果这类查询是高频操作,建议在文档中新增一个存储小写数组的字段(比如categoryLower),提前将category的元素转小写存储:

{
"id":1,
"category":["cosmos","mongo"],
"categoryLower":["cosmos","mongo"]
}

之后直接使用ARRAY_CONTAINS查询,利用索引提升性能:

SELECT u.id FROM users u WHERE ARRAY_CONTAINS(u.categoryLower, LOWER('Mongo'))

内容的提问来源于stack exchange,提问作者karthik Rao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:12:42