#google-cloud-firestore
#google-cloud-firestore
Вопрос:
У меня есть массив в Firestore в разных документах, подобных этому:
Цвета: [синий, красный, зеленый]
Я хочу выполнить запрос, чтобы найти документы, соответствующие моему вводу, Цвета: [Красный, зеленый, синий]. Но он не должен возвращать документы, содержащие больше этого, т.е. [Синий, красный, зеленый, желтый]. Это должно быть точное совпадение, но я не обязательно знаю порядок элементов в массиве. Возможно ли это вообще?
Ответ №1:
Сначала добавьте в каждый документ поле, содержащее длину массива, чтобы можно было фильтровать на основе длины массива. Затем создайте составной запрос для массивов правильной длины с предложением «array-contains» для каждого цвета.
Обратите внимание, что конкретный массив, который вы ищете, не должен содержать повторяющихся элементов, иначе этот метод не будет работать корректно.
Ответ №2:
То, что вы просите, невозможно с помощью одного запроса с данными, которые у вас есть сейчас. Вам придется либо:
- Убедитесь в порядке массива, чтобы вы могли использовать фильтр равенства, предоставляющий массив, содержащий точно такие же данные.
- Перепишите массив в map, чтобы вместо этого вы могли использовать фильтр равенства для того же набора пар ключ / значение. (Ключами могут быть цвета, а значениями могут быть просто логические значения true.)