Несколько входящих операторов из одной коллекции в запросе firebase cloudstore

#angular #firebase #google-cloud-firestore

#angular #firebase #google-cloud-firestore

Вопрос:

У меня есть запрос firebase (псевдокод)

 collectionName
, ref => ref
.where('field1' , 'in', array1)
.where('field2' , 'in' , array2)
.snapshotChanges()
.pipe(map(actions  => {
 return actions.map(a => {
    /* Some more Code */
  })
})
  

Мне нужно сохранить несколько входящих операторов для полей данных из FB Cloud Firestore. При этом я сталкиваюсь с проблемами с ошибкой, поскольку в одном запросе не может быть нескольких операторов in.
Есть ли какой-либо способ, откуда я могу извлекать записи только на основе этого запроса.
Я не собираюсь использовать один оператор IN в запросе для извлечения всех записей из FB и фильтрации их на стороне клиента

Ответ №1:

Мне нужно сохранить несколько входящих операторов для полей данных из FB Cloud Firestore.

В документации довольно ясно, что это невозможно.

Обратите внимание на следующие ограничения для in и array-contains-any:

  • in и array-contains-any поддерживают до 10 значений сравнения.
  • Вы можете использовать только одно предложение in или array-contains-any для каждого запроса. Вы не можете использовать как in, так и array-contains-any в одном запросе.
  • Вы можете комбинировать array-contains с in, но не с array-contains-any.
  • Вы не можете упорядочить свой запрос по какому-либо полю, включенному в предложение equality (=) или in.

Это жесткие ограничения. Простых обходных путей не существует. Рассмотрите возможность реструктуризации ваших данных таким образом, чтобы запрос, который вы хотите выполнить, был возможен, или выполнение нескольких запросов и вычисление пересечения их результатов.

Комментарии:

1. Спасибо, @Doug за ваш ответ. Любые предложения, связанные с реструктуризацией данных, были бы полезны.

2. Я предлагаю вам открыть новый вопрос по этому вопросу (реструктуризация ваших данных) и указать структуру вашего документа, вашу цель, что вы пробовали и какие ошибки / препятствия вы получили.