#node.js #firebase #google-cloud-firestore #nosql #firebase-admin
# #node.js #firebase #google-облако-firestore #nosql #firebase-admin
Вопрос:
У меня есть эта схема данных Firestore:
rootCol/{rootDoc}/subCol1/{doc1Type}
rootCol/{rootDoc}/subCol2/{doc2Type}
Я хочу получить все документы в subCol1
where rootDoc
contain doc2Type
с определенным полем.
Я знаю, что могу использовать простой .where
вызов, чтобы получить все doc2Type
, где exampleField == ‘exampleString’
, а затем получить путь для поиска SubCol1
.
НО проблема subCol2
в том, что может содержать много doc2Type
с. exampleField
Это означает, что мой запрос вернет много doc2Type
, а затем вызовет многократный вызов моего запроса subCol1/{doc1Type}
.
Как я могу получить только 1 документ из каждой subCol2
вложенной коллекции, где exampleField == ‘exampleString’
?
Ответ №1:
Это невозможно с запросом группы коллекций. Эти запросы рассматривают все документы среди всех вложенных коллекций одинаково. Он не может «группировать» документы по вложенной коллекции или позволять применять фильтры для каждой вложенной коллекции.
Вам придется либо реструктурировать свои данные, чтобы лучше поддерживать то, что вы пытаетесь сделать, либо написать клиентский код, фильтрующий результаты запроса группы коллекций, чтобы найти один документ в каждой вложенной коллекции, используя ссылку на каждый документ, чтобы ограничить результаты вашими требованиями.
Комментарии:
1. Спасибо за ответ! Как я могу отфильтровать результат запроса группы сбора, если оба документа будут иметь очень похожие данные?
2. Это вам решать. Я не вижу ваших данных и не знаю, какие документы вам нужны.
3. Спасибо! На самом деле я думаю, что у меня есть решение. Существует одно поле, которое отличается в разных документах в одной и той же вложенной коллекции. Так, может быть, я могу выполнить запрос группы вложенных коллекций с 2
.where
фильтрами?4. Опять же, я не вижу ваших данных, поэтому не могу давать никаких рекомендаций. Если у вас есть новый вопрос, пожалуйста, разместите его отдельно с кодом и данными, которые работают не так, как вы ожидаете.