#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. Это очень помогает! Спасибо!