Как определить, НЕ является построителем структуры sanity.io?

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

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 ответа

Решение

Полученный ответ с помощью Vision (действительно приятный инструмент)

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

 .filter('_type == $type && !defined(categories)')
 .params({ type: 'product' })

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

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

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

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

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

Другие вопросы по тегам