Firestore составной запрос с <= &> = - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно запросить в коллекции пожарного магазина записи, в которых время начала (которое является числом) равно >= slot.start и <= slot.end.

как это:

.collection('Entries', ref => ref.where('timeStart', '>=', slot.timeStart).where('timeEnd', '<=', slot.timeEnd))

но я получаю эту ошибку:

Invalid query. All where filters with an inequality (<, <=, >, or >=) must be on the same field.

Я думал, что этот запрос будет работать с составным индексом, но, как говорит ошибка, это не работает.

Когда я изменяю запрос на это:

.collection('Entries', ref => ref.where('timeStart', '==', slot.timeStart).where('timeEnd', '<=', slot.timeEnd))

Я могу создать для него индекс. Кроме того, когда я заменяю 2 '<=' на '==', мне даже не нужен индекс для него. </p>

Я не думал, что мой запрос такой продвинутый, и я немного разочарован тем, что FireStore не может выполнить этот запрос. Итак, что является лучшим решением для моей проблемы? Следующая лучшая вещь, чтобы пропустить 2-й оператор запроса, как это

.collection('Entries', ref => ref.where('timeStart', '>=', slot.timeStart))

А затем перебрать результаты и проверить, если timeEnd <= entry.timeEnd "вручную"? Мне кажется, это действительно плохое решение, потому что тогда мне может понадобиться загрузить много данных.

1 Ответ

0 голосов
/ 29 августа 2018

Вам нужно будет выбрать одно поле и запросить его, а затем отфильтровать другое на стороне клиента. Сложные запросы документация является твердой на этом.

Вы можете выполнять сравнение диапазонов (<, <=,>,> =) только для одного поля , и вы можете включить не более одного предложения array_contains в составной запрос:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...