Отфильтровать результат запроса по значению поля внутри массива объектов [Sanity.io & GROQ] - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь найти вариант продукта в моем списке продуктов (на sanity.io с использованием GROQ), для этого у меня есть номер варианта, который я хочу.

Запрос Iиспользую is *[_type == "product" && variants[].sku.current =="kit-kat-wasabi-5" ] Но этот запрос возвращает пустой массив. Я уверен, что пометка верна, потому что если я оставлю фильтр в стороне и заберу все, что смогу найти. Я попытался заменить "==" на матч, но результат тот же.

мои схемы

procuct

export default {
  name: 'product',
  title: 'Product',
  type: 'document',
  fields: [
    {
      name: 'title',
      title: 'Inner Title',
      type: 'string'
    },
    {
      title: 'SKU',
      name: 'sku',
      type: 'slug',
      options: {
        source: 'title',
        maxLength: 96
      },
      validation: Rule => Rule.required()
    },
    {
      name: 'titleWebsite',
      title: 'Title Website',
      type: 'localeString'
    },
    {
      name: 'active',
      title: 'Active',
      type: 'boolean'
    },
    {
      name: 'mainImage',
      title: 'Imagem',
      type:"image"
    },
    {
      name: 'slug',
      title: 'Slug',
      type: 'slug',
      options: {
        source: 'title',
        maxLength: 96
      }
    },
    {
      title: 'Base Price',
      name: 'basePrice',
      type: 'localeCurrency'
    },
    {
      title: 'Quantidade',
      name: 'qty',
      type: 'number'
    },
   /* {
      title: 'Default variant',
      name: 'defaultProductVariant',
      type: 'productVariant'
    },*/
    {
      title: 'Variants',
      name: 'variants',
      type: 'array',
      of: [
        {
          title: 'Variant',
          type: 'productVariant'
        }
      ]
    },
    {
      title: 'Tags',
      name: 'tags',
      type: 'array',
      of: [
        {
          type: 'string'
        }
      ],
      options: {
        layout: 'tags'
      }
    },
    {
      name: 'vendor',
      title: 'Vendor',
      type: 'reference',
      to: {type: 'vendor'}
    },
    {
      name: 'blurb',
      title: 'Blurb',
      type: 'localeString'
    },

    {
      name: 'categories',
      title: 'Categories',
      type: 'array',
      of: [
        {
          type: 'reference',
          to: {type: 'category'}
        }
      ]
    },
    {
      name: 'body',
      title: 'Body',
      type: 'localeBlockContent'
    }
  ],

  preview: {
    select: {
      title: 'title',
      manufactor: 'manufactor.title',
      media: 'mainImage'
    }
  }
}

И productVariant

export default {
  title: 'Product variant',
  name: 'productVariant',
  type: 'object',
  fields: [
    {
      title: 'Title',
      name: 'title',
      type: 'string'
    },
    {
      title: 'Title Website',
      name: 'titleWebsite',
      type: 'localeString'
    },
    {
      title: 'Weight in grams',
      name: 'grams',
      type: 'number'
    },
    {
      title: 'Price',
      name: 'price',
      type: 'localeCurrency'
    },
    {
      title: 'SKU',
      name: 'sku',
      type: 'slug',
      options: {
        source: 'title',
        maxLength: 96
      },
      validation: Rule => Rule.required()
    },
    {
      title: 'Taxable',
      name: 'taxable',
      type: 'boolean'
    },
    {
      name: 'blurb',
      title: 'Blurb',
      type: 'localeString'
    },
    {
      name: 'images',
      title: 'Images',
      type: 'array',
      of: [
        {
          type: 'image',
          options: {
            hotspot: true
          }
        }
      ]
    },
    {
      title: 'Quantidade',
      name: 'qty',
      type: 'number'
    },
    {
      title: 'Bar code',
      name: 'barcode',
      type: 'barcode'
    }
  ]
}

...