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

Sanity GROQ如何按引用字段值对查询结果排序

GROQ实现按关联最新fact排序celeb列表

核心查询语句

你可以通过子查询拉取每个celeb关联的最新fact更新时间,将该字段作为排序依据即可实现需求,可直接使用的GROQ语句如下:

*[_type == "celeb"]{
  // 按需配置需要返回的celeb字段,以下为示例
  _id,
  name,
  avatar,
  bio,
  // 子查询获取当前celeb关联的最新更新fact的时间戳
  "latestFactUpdatedAt": *[_type == "fact" && references(^._id)] | order(_updatedAt desc)[0]._updatedAt
}
// 按最新fact更新时间倒序,刚新增/更新关联fact的celeb会自动排在列表顶部
| order(latestFactUpdatedAt desc)

逻辑说明与自定义调整

  • 语句中^._id指代外层遍历到的当前celeb文档ID,references(^._id)会匹配所有引用了该celeb的fact文档
  • 子查询内先将关联到的fact按更新时间倒序排列,取第一条的_updatedAt值作为当前celeb的排序依据
  • 如果需要让没有任何关联fact的celeb按照自身更新时间参与排序,可将排序语句替换为| order(coalesce(latestFactUpdatedAt, _updatedAt) desc),coalesce方法会在关联fact不存在时,自动取celeb自身的更新时间作为排序值
  • 如果不需要展示无关联fact的celeb,可在最外层查询条件中增加过滤规则:*[_type == "celeb" && count(*[_type == "fact" && references(^._id)]) > 0]

内容的提问来源于stack exchange,提问作者M.K. Safi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:12:27