Как сделать внутреннее соединение как условие в GROQ? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть набор данных с posts , который может иметь массив категорий.

Как мне сделать запрос GROQ, который выбирает все сообщения с категорией с заголовком "Page" ?

Я думаю, что я мог бы сделать что-то вроде этого:

*[_type == 'post' && categories[]->title == 'Page']{
  body,
  slug,
}

Мне, вероятно, нужно использовать функцию для сопоставления внутри массивано таблица слишком плотная для меня - я просто не могу ее найти.

Суть моего набора данных:

{
  {
    _createdAt: "2018-08-24T17:59:04Z",
    _id: "e84d78f0-81ed-4524-9c36-f38a1f1b2375",
    _rev: "1X9D03Y03BUslZ33alDJwF",
    _type: "category",
    _updatedAt: "2018-08-24T18:13:14Z",
    description: "Pages/Sider",
    title: "Page"
  },
  {
    _createdAt: "2018-08-26T21:57:54Z",
    _id: "3c023e29-b167-4021-be00-5e8dc14f65cc",
    _rev: "WQjjTjyYBRudo6JCOBCUj7",
    _type: "post",
    body: [
      {}
    ],
    categories: [],
  },
  {
    _createdAt: "2018-08-24T17:57:55Z",
    _id: "3d8f0c40-a45d-4dc7-ad95-ed1b49bca4af",
    _rev: "WQjjTjyYBRudo6JCO0spXR",
    _type: "post",
    body: [
      {}
    ],
    categories: [
      {
        _key: "491c03573205",
        _ref: "e84d78f0-81ed-4524-9c36-f38a1f1b2375",
        _type: "reference"
      }
    ]
  }
}

Простой запрос:

*[_type == 'post']{
  //  body,
  "category": categories[]->title,
  //  slug,
  categories
}

Возвращает:

{
  categories: [],
  category: []
}

{
  categories: [
    {
      _key: "491c03573205",
      _ref: "e84d78f0-81ed-4524-9c36-f38a1f1b2375",
      _type: "reference"
    }
  ],
  category: [
    Page
  ]
}

1 Ответ

0 голосов
/ 27 августа 2018

Согласно документации по соединению вы можете использовать внутренние объединения в фильтре GROQ.Я думаю, что это должно сработать для вас, при условии, что ваши документы категории _type: "category":

*[_type == 'post' &&
  *[_type == "category" &&
    title == "Page"][0]._id in categories[]._ref]{
   body,
   slug,
 }

Надеюсь, это решит вашу проблему!

...