Как мне запросить Cloud Firestore для массива, который соответствует всем значениям, но в любом порядке?

#google-cloud-firestore

#google-cloud-firestore

Вопрос:

У меня есть массив в Firestore в разных документах, подобных этому:

Цвета: [синий, красный, зеленый]

Я хочу выполнить запрос, чтобы найти документы, соответствующие моему вводу, Цвета: [Красный, зеленый, синий]. Но он не должен возвращать документы, содержащие больше этого, т.е. [Синий, красный, зеленый, желтый]. Это должно быть точное совпадение, но я не обязательно знаю порядок элементов в массиве. Возможно ли это вообще?

Ответ №1:

Сначала добавьте в каждый документ поле, содержащее длину массива, чтобы можно было фильтровать на основе длины массива. Затем создайте составной запрос для массивов правильной длины с предложением «array-contains» для каждого цвета.

Обратите внимание, что конкретный массив, который вы ищете, не должен содержать повторяющихся элементов, иначе этот метод не будет работать корректно.

Ответ №2:

То, что вы просите, невозможно с помощью одного запроса с данными, которые у вас есть сейчас. Вам придется либо:

  1. Убедитесь в порядке массива, чтобы вы могли использовать фильтр равенства, предоставляющий массив, содержащий точно такие же данные.
  2. Перепишите массив в map, чтобы вместо этого вы могли использовать фильтр равенства для того же набора пар ключ / значение. (Ключами могут быть цвета, а значениями могут быть просто логические значения true.)