Как получить только один документ для каждой вложенной коллекции в запросе группы коллекций?

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