Запрос Firestore, основанный на атрибуте subcollection - PullRequest
0 голосов
/ 09 марта 2020

У меня есть следующая структура контента в firestore (коллекция каналов и подколлекция подписчиков в каждом канале):

channels (is a collection):
  - {channel id} (channel document id)
    - name,
    - description, ...
    - followers (subcollection in every channel)
      - {user id} (follower document id)
        - state (user attribute) = 1 (is active),

Я пытаюсь запросить, чтобы получить все каналы одного подписчика. , что-то похожее на:

// dart
db.collection('channels').where('followers.$uid.state', isEqualTo: 1).snapshots();

Где $ uid является действительным идентификатором пользователя. Затем результат запроса должен возвращать все каналы, где пользователь является последователем. Я мог бы сделать это с массивом пользовательских идентификаторов в канале, но у меня будет большое количество подписчиков, и в массивах мне придется читать и записывать полный массив в каждой модификации, когда я добавляю или удаляю подписчиков.

Спасибо!

1 Ответ

1 голос
/ 09 марта 2020

Единственный способ сделать это - не просто запрос. Вы можете использовать запрос группы сбора , чтобы найти все последующие документы среди всех каналов, которые соответствуют некоторым критериям, но вам придется извлечь идентификаторы каналов из путей этих документов, используя ссылки в снимках документа .

db.collectionGroup('followers').where('$uid.state', isEqualTo: 1)

Запустите этот запрос, а затем повторите каждый DocumentSnapshot . Каждый снимок будет иметь справочное свойство , которое содержит полный путь к документу. Используйте родительское свойство каждой ссылки, чтобы перейти к DocumentReference , который относится к каналу, и добавьте его documentID к набору. После завершения итерации этот набор будет содержать все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...