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

Sanity GROQ查询异常:仅返回en-US页面,移除对应条件后恢复正常

问题排查与解决方案

你的问题核心是查询结果中en-US语言的文档被优先选中,导致即使传入其他lang值,[0]始终取到en-US的条目。原因是当前查询会同时返回符合en-US和目标语言的文档(若两者都存在),而数组的第一个元素默认按Sanity内部排序规则(通常是文档创建时间升序,旧文档在前)返回,en-US的文档恰好排在前面。

修复方案

调整查询逻辑,优先匹配目标语言,仅当目标语言文档不存在时才回退到en-US:

方案1:通过排序优先展示目标语言文档

*[
  _type == 'pages' &&
  slug.current == "${slug}" &&
  isHidden != true
] | order(language == "${lang}" desc)[0]

方案2:先查询目标语言,不存在则 fallback 到en-US

*[
  _type == 'pages' &&
  language == "${lang}" &&
  slug.current == "${slug}" &&
  isHidden != true
][0] ?? *[
  _type == 'pages' &&
  language == 'en-US' &&
  slug.current == "${slug}" &&
  isHidden != true
][0]

原查询问题解析

原查询(language == 'en-US' || language == "${lang}")会同时拉取两种语言的匹配文档(若都存在),而[0]仅取结果数组的第一个元素。如果en-US的文档创建时间更早,就会被优先返回,直接覆盖了目标语言的查询结果。

内容的提问来源于stack exchange,提问作者shubham tarpara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:12:36