如何在 GROQ 中将内部联接作为条件?

dot*_*ter 6 sanity groq

我有一个包含posts 的数据集,其中可能有一系列类别。

如何进行 GROQ 查询来选择标题为“Page”的类别的所有帖子?

我想我可以做这样的事情:

*[_type == 'post' && categories[]->title == 'Page']{
  body,
  slug,
}
Run Code Online (Sandbox Code Playgroud)

我可能需要使用函数在数组内进行匹配,但清单对我来说太密集了 - 我只是找不到它。

我的数据集的要点是:

*[_type == 'post' && categories[]->title == 'Page']{
  body,
  slug,
}
Run Code Online (Sandbox Code Playgroud)

一个简单的查询:

*[_type == 'post']{
  //  body,
  "category": categories[]->title,
  //  slug,
  categories
}
Run Code Online (Sandbox Code Playgroud)

返回:

{
  categories: [],
  category: []
}

{
  categories: [
    {
      _key: "491c03573205",
      _ref: "e84d78f0-81ed-4524-9c36-f38a1f1b2375",
      _type: "reference"
    }
  ],
  category: [
    Page
  ]
}
Run Code Online (Sandbox Code Playgroud)

knu*_*nut 6

根据联接文档,您可以在 GROQ 过滤器中使用内部联接。我认为这应该适合您,前提是您的类别文档是_type: "category"

*[_type == 'post' &&
  *[_type == "category" &&
    title == "Page"][0]._id in categories[]._ref]{
   body,
   slug,
 }
Run Code Online (Sandbox Code Playgroud)

希望这能解决您的问题!