Как определить НЕ является sanity.io конструктор структуры? - PullRequest
2 голосов
/ 18 февраля 2020

Я пытаюсь отфильтровать все товары без категорий (это массив ссылок) и не могу найти, как это сделать.

S.listItem()
  .title('Without category')
  .id('productsWithoutCategories')
    .child(
      S.documentList()
        .title('Without categories')
        .menuItems(S.documentTypeList('product').getMenuItems())
        .filter('_type == $type && !category')
        .params({ type: 'product' })
      )

!category не работает. Буду благодарен за помощь.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020

Окончательный ответ с Vision (действительно приятный инструмент)

https://www.sanity.io/docs/the-vision-plugin

 .filter('_type == $type && !defined(categories)')
 .params({ type: 'product' })
2 голосов
/ 18 февраля 2020

Как вы уже узнали сами, вы можете использовать функцию defined, чтобы проверить, установлено ли что-то (или не установлено с помощью оператора NOT !). Вы можете найти некоторую документацию относительно функции defined здесь:

Просто хочу процитировать также документацию:

Вы никогда не увидите нулевое значение в документе, хранящемся в Sanity. Если вы обновите значение до нуля, этот ключ исчезнет. Таким образом, ограничение на null, которое вы можете знать из SQL, не имеет здесь никакого значения. Значение может быть либо defined, либо !defined.

А со страницы «Как работают запросы»:

Фильтрация по наличию поля, например, *[defined(status)] которые соответствуют только документу, в котором для свойства status установлено любое значение.

...