Ошибка Firestore: нельзя использовать несколько условных предложений where для разных свойств

Я пытаюсь использовать несколько фильтров «где» в запросе Firestore. Мой запрос основан на приведенном выше примере .

Мой запрос:

let colRef = firebase.firestore().collectionGroup('volumes')
colRef = colRef.where('days', 'array-contains', day)
colRef = colRef.where('start_time', '<=', time)
colRef = colRef.where('end_time', '>', time)
colRef = colRef.where('volume', '>', 0)
const snapshot = await colRef.get()

Я получаю указанную выше ошибку:

Ошибка: 3 INVALID_ARGUMENT: нельзя использовать фильтры неравенства для нескольких характеристики

Я проверил составные запросы Firestore и обнаружил, что:

Вы можете выполнять сравнение диапазонов (<, <=, >, >=) или не равно (!=) только в одном поле.

Это огромное ограничение для запросов Firestore. Мне не хватает другого варианта для реализации этого запроса?

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
1 587
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Условие диапазона в Firestore может применяться только к одному полю. Это жесткое ограничение, которое хорошо задокументировано (как вы уже указали в своем вопросе).

Firestore предлагает только API-интерфейсы, которые могут соответствовать его гарантиям производительности, основной из которых заключается в том, что запросы возвращают результаты за время, которое связано только с объемом возвращаемых данных, а не с объемом данных, которые необходимо искать для этих результатов. .

Если вам нужны более гибкие запросы, чем предлагает Firestore, вам следует рассмотреть возможность использования другой базы данных. Но вы, вероятно, потеряете гарантию производительности Firestore с этой другой базой данных.

Это немного разочаровывает, так как в некоторых случаях производительность не требуется, но ценовая эффективность необходима. Я бы предпочел, чтобы затраты Firestore были больше основаны на производительности ресурсов (таких как ЦП и ОЗУ), чем на количестве чтений. Неточный запрос приводит к неэффективному чтению, что стоит больших денег даже для небольших приложений. Я думаю, что у Firebase огромный потенциал, но он должен изменить свои цены, чтобы они больше основывались на ресурсах. Спасибо за ваш честный ответ.

genericUser 21.12.2020 18:21

Отсутствие поддержки этой операции никак не связано со стоимостью, а связано исключительно с производительностью. Поскольку инженеры Firestore не нашли способа гарантировать производительность запросов с несколькими полями, они не поддерживаются.

Frank van Puffelen 21.12.2020 20:23

Почему клиентам выставляется счет за то, что не является ресурсом? (например, ЦП, ОЗУ, пропускная способность и т. д.). «Читает» Firestore — это не ресурс, это просто способ получить больше денег. Я предпочитаю больше платить за ресурсы, которые я использую, а не за «чтение», «запись» или «удаление». «Чтение» клиентов — очень дорогая услуга на Firestore, и это неоправданно. Я могу прочитать документ с миллионом строк, неэффективно, или я могу получить один небольшой документ по DocId, и мне будет выставлен СЧЕТ SMAE. Что не имеет никакого смысла.

genericUser 21.12.2020 21:18

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