Как сделать запрос к вложенному документу Firestore

Я работаю над приложением и хочу запросить поддокумент Firestore. Позвольте мне объяснить дальше.

  1. У меня есть коллекция документов, где хранятся автомобили, каждый документ имеет конкретную машину с описанием.
  2. В каждом из этих документов я представляю собой сборник под названием user_data у которого есть собственный документ, в котором хранится конкретный идентификатор пользователя, добавившего автомобиль в свой список пожеланий.

Теперь я хочу получить документ об автомобилях, если в подколлекции присутствует идентификатор пользователя. Короче говоря, я хочу получить список желаний конкретного пользователя. Я использую streambuilder с listviewbuilder, но проблема в том, как мне выполнить этот запрос?

Или есть какой-нибудь более простой способ сделать это?

2 ответа

Решение

Запросы в Firestore являются мелкими, что означает, что они получают только элементы из коллекции, с которой выполняется запрос. Невозможно получить документы из коллекции верхнего уровня и других коллекций или вложенных коллекций в одном запросе. Firestore не поддерживает запросы к различным коллекциям за один шаг. Таким образом, вы не можете получить элементы из коллекции, основанные на элементах, которые существуют в подколлекции. Один запрос может использовать только свойства документов в одной коллекции.

Короче говоря, я хочу получить список желаний конкретного пользователя.

Поэтому самое простое решение, которое я могу придумать, - добавить под каждым объектом пользователя массив любимых автомобилей. Ваша новая структура базы данных должна выглядеть примерно так:

Firestore-root
    |
    --- users
          |
          --- uid
               |
               --- favoriteCars : ["carId", "carId"]

Таким образом, вы можете запросить вашу базу данных, чтобы получить только автомобили, которые пользователь отметил их как избранные. Вы можете также хранить вместо этих идентификаторов в массиве фактический объект автомобиля. Пожалуйста, смотрите здесь более подробно о плюсах и минусах.

В настоящее время Firebase Cloud Firestore не поддерживает запросы с вложенной коллекцией. Возможно, вам придется структурировать вашу базу данных так, чтобы можно было делать запросы.

  • Храните идентификатор пользователя в массиве в автомобильном документе.
  • Используйте отдельную коллекцию, чтобы сохранить связь между пользователем и автомобилями.

Вы можете проверить это видео из Firebase.

Карты, массивы и подколлекции, о мой! | Познакомьтесь с Cloud Firestore

Другие вопросы по тегам