Я пытаюсь использовать несколько фильтров «где» в запросе 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. Мне не хватает другого варианта для реализации этого запроса?
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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