Фильтрация массива дат (datetime) с помощью GROQ (здравомыслие) (React App)
У меня есть список фильмов, которые можно показывать более одного раза. Я решил предоставить пользователю возможность выбрать несколько дат для одного фильма (интерфейс студии Sanity).
Схема для фильмов выглядит следующим образом:
export default {
name: 'movie',
title: 'Movie',
type: 'document',
fields: [
{
name: 'title',
title: 'Title',
type: 'string'
},
{
name: 'dates',
title: 'Dates',
type: 'array',
of: [
{
type: 'datetime',
options: {
dateFormat: 'YYYY-MM-DD',
timeFormat: 'HH:mm',
timeStep: 15,
calendarTodayLabel: 'Today'
}
}
]
},
{
name: 'poster',
title: 'Poster',
type: 'image',
options: {
hotspot: true
}
},
{
name: 'body',
title: 'Body',
type: 'blockContent'
}
],
preview: {
select: {
title: 'title',
date: 'date',
media: 'poster'
}
}
}
Текущий запрос:
const query = groq`*[_type == "movie"]{
title,
dates,
poster,
body
}`
Мне нужно отфильтровать фильм, который имеет сегодняшнюю дату в массиве дат с помощью GROQ
Может быть, я слишком усложняю это, и кто-то придумает лучший способ.
Идея состоит в том, чтобы избежать дубликатов в базе данных (1 фильм может быть показан 3-6 раз). Это единственная причина, по которой я использовал массив
0 ответов
Решением для этого должно быть:
const query = '*[_type == "movie" && dates match $today]{title, dates, poster, body}'
const today = new Date().toISOString().split('T')[0]
client.fetch(query, {today}).then(result => {
// movies which are showing today
})
Однако в настоящее время в токенизаторе строк есть ошибка, которая нарушает сопоставление строки даты. А пока, боюсь, единственный вариант - получить все фильмы и отфильтровать клиентскую часть. Мы надеемся исправить это как можно скорее.