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

如何使用Sanity Groq实现数组的多条件动态筛选?

问题说明

需要查询的文档category字段为字符串数组,结构示例如下:

"category": [
  "A",
  "B",
  "C"
]

原先使用的GROQ筛选语句:

*[ "A" || "C" in category ]{
}

该语句存在逻辑错误,仅能匹配到category包含"C"的文档,无法命中包含"A"的文档,需求是不需要为每个筛选值重复编写in category判断,支持动态更新筛选条件完成匹配。

错误原因

GROQ中in运算符优先级高于逻辑或||,上述语句实际解析逻辑为"A" || ("C" in category),完全不符合「A或C任意一个存在于category数组中就匹配」的预期。

实现方案

GROQ原生支持数组对数组的包含匹配,不需要逐个写值判断:

  • 把所有需要匹配的筛选值整理为一个数组,直接判断该数组是否有元素存在于category数组中即可,只要任意一个值匹配就会命中文档。

固定筛选值的写法示例:

*[ ["A", "C"] in category[] ]{
  // 在此处配置需要返回的文档字段
}

动态传入筛选条件的写法示例,后续增删筛选值只需要修改传入的参数,不需要调整查询语句逻辑:

// 传入参数格式示例:{ "matchCategories": ["A", "C", "E"] }
*[ $matchCategories in category[] ]{
  // 在此处配置需要返回的文档字段
}

补充:如果需要实现「category字段必须同时包含所有筛选值」的全匹配需求,把判断条件替换为count( $matchCategories in category[] ) == count($matchCategories)即可。

内容的提问来源于stack exchange,提问作者B Ric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:36:14