Как получить вложенную коллекцию после GroupCollection()?

#swift #google-cloud-firestore

# #swift #google-облако-firestore

Вопрос:

Я создаю приложение для чата на iOS с помощью firestore. Я не могу понять, как получить вложенную коллекцию после выполнения GroupCollection().

Структура базы данных

 users (collection)
  some_user_info
  conversations (collection)
    some_conversation_info
    messages (collection)
 

Если A и B ведут диалог, и A отправляет сообщение B, я создаю диалог с одинаковым идентификатором как для A, так и для B, но сохраняю это сообщение только для A. (Кто ее отправляет, кому она принадлежит)

Поэтому при получении всех сообщений между A и B я должен сделать

 db.collectionGroup("conversations").whereField("id", isEqualTo: conversationId)
 

Но, похоже, нет способа получить коллекцию сообщений после группового запроса в разговорах. Есть ли какой-либо обходной путь?

Спасибо!

Ответ №1:

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

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

Комментарии:

1. Как получить DocumentReference? Групповая коллекция возвращает запрос, и нет способа превратить запрос в ссылку, верно? Но вы правы, я собираюсь реструктурировать БД. Все еще не используется для разработки базы данных nosql. Спасибо!

2. Вы можете получить ее из отдельного DocumentSnapshot.

3. Это очень помогает! Спасибо!