Независимо от того, какую платформу вы используете для создания своего приложения, я уверен, что полученная вами ошибка является довольно явной. Официальная документация Cloud Firestore также довольно явно относится к этой теме. Таким образом, существуют некоторые ограничения запроса , когда дело доходит до Firestore:
Cloud Firestore не поддерживает следующие типы запросов:
- Логические ИЛИ запросы. В этом случае вы должны создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении.
Таким образом, запрос Firestore может выполнять фильтрацию диапазона только для одного свойства. Поскольку вы пытаетесь отфильтровать диапазоны по двум свойствам, вы получаете это сообщение об ошибке, и это ожидаемое поведение, поскольку это невозможно в одном запросе Firestore.
Чтобы решить эту проблему, вы можете выбрать одно из следующих решений:
Вы можете выполнить фильтрацию для одного ( первое ) поля в запросе и для другого (второго) поля на стороне клиента, как также указывается в официальной документации.
Вы можете каким-то образом объединить значения двух диапазонов в одно поле, что позволяет использовать ваш вариант использования с одним полем. Очень удачным примером такой комбинации было бы использование геохэш для фильтрации по свойствам широты и долготы, как Франк Ван Пуффелен очень хорошо объяснил в этом видео, Опрос Firebase и Firestore .
Другой вариант - изменить способ хранения данных и смоделировать их по-другому. Самая простая реализация - поместить все элементы в пределах startDate
и endDate
в одну коллекцию. Поскольку вы не выбрали тег для платформы, я напишу необходимый запрос в Javascript, но он может быть написан просто для других языков программирования. Таким образом, вы можете запросить эту коллекцию с помощью следующего запроса:
db.collection("startDate-endDate").where('date','>=', start).where('date','<=', end);
Другой, еще более общий вариант - хранить все ваши предметы в коллекции для каждого необходимого вам периода (год, месяц или день), а затем выполнять необходимое количество запросов для получения искомых предметов. за одну из каждой коллекции itemsFromFirstYear
, itemsFromSecondYear
и т. д.
Пожалуйста, ознакомьтесь также с официальной документацией относительно:
ИМХО, я бы порекомендовал подобрать первый вариант.