#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. Я предлагаю вам открыть новый вопрос по этому вопросу (реструктуризация ваших данных) и указать структуру вашего документа, вашу цель, что вы пробовали и какие ошибки / препятствия вы получили.