Как создать цепочку оператора where с несколькими `==` s, несколькими `> =`, несколькими фильтрами диапазона `<=` - PullRequest
0 голосов
/ 24 июня 2019

Мне нужно получить данные о «вещах»: «Животные», «тип»: «Млекопитающие», «dob»> = startDate и «dbo» <= endDate </p>

Возможно ли сделать запрос как ref.where('things', '==', 'Animals').where('type', '==', 'Mammals').where('dob', '>=', startDate).where('dob', '<=', endDate)

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

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Документация здесь https://firebase.google.com/docs/firestore/query-data/queries

Говорит, что для объединения равенства с диапазоном вам нужно создать составной индекс.

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

Подробнее о создании составных индексов можно прочитать здесь https://firebase.google.com/docs/firestore/query-data/indexing

Как указано в комментариях AndrewHill,Похоже, что firestore позволит вам автоматически создавать составной индекс после первой попытки его запроса.Так что это определенно должно помочь в случае необходимости.101

0 голосов
/ 24 июня 2019

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

Поскольку единственный фильтр диапазона, который у вас есть, находится на dob, ваш запрос должен быть возможным.Вам потребуется определить составной индекс для things, type и dob, чтобы разрешить запрос.Если у вас нет этого индекса, клиент Firestore зарегистрирует ошибку в выводе консоли.Если щелкнуть ссылку в этом сообщении об ошибке, вы попадете прямо на экран создания индекса с уже заполненной формой с правильной информацией для требуемого индекса.

...