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

Я создаю частный чат для своего приложения. В качестве серверной части я выбрал Firestore, и ниже показано, как структурированы потоки чата и сообщения.

privateChatschatId1chatId1messageId1, messageId2,...

collectiondocumentcollectiondocuments

вот скриншот  структура базы данных

Я пытаюсь получить снимки всех потоков чата (chatId1, chatId2, …) с их соответствующим сообщением (последний документ / сообщение было отправлено) и отображать их, как показано ниже — см. Экран чата

Я пробовал что-то подобное databaseRef.collection('privateChats').where('chatId', whereIn: chatList).snapshots(); Однако потоки, которые возвращаются из приведенных выше снимков, отслеживают изменения только в тех полях, где существует поле createdAt.

Это дает мне единственную возможность получить индивидуальный снимок для каждого потока чата, подобного этому databaseRef.collection('privateChats').doc('chatId1).collection('chatId1).snapshots(); databaseRef.collection('privateChats').doc('chatId2).collection('chatId2).snapshots();, и каким-то образом объединить эти снимки в единый поток (я не знаю как)

Итак, мой вопрос: есть ли способ получить снимки каждого потока чата с помощью всего одного запроса при заданном списке идентификаторов чата? Если нет, то какое решение? Стоит ли мне придумать другую структуру облачного хранилища пожаров? Спасибо, Чаты

См. также:  Параллельный код с OpenMP требует больше времени для выполнения, чем последовательный код
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. scortumee

    я думаю, вы можете создать документ для каждой комнаты чата … например, databaseRef.collection('privateChats').doc('chatId1+chatId2') тогда оба пользователя id1 и id2 могут получить доступ только к документу

    Привет, спасибо за ответ. Я не совсем понял, что вы имеете в виду. Не могли бы вы прояснить это подробнее? person scortumee; 03.11.2020

    да, в настоящее время он структурирован так, как вы описываете, но немного отличается databaseRef.collection('privateChats').doc('usertId1-userId2') другими словами userId1-userId2 представляет chatId1 person scortumee; 03.11.2020

    я говорю, что вместо того, чтобы слушать два потока, вы можете сделать это одним, создав документ для каждой комнаты чата (которая, очевидно, состоит из двух пользователей), например, `databaseRef.collection (‘privateChats’). doc (‘chatId1 + chatId2 ‘) `где chatId1 — это идентификатор первого пользователя, а chatId2 — это идентификатор второго пользователя. Надеюсь, теперь ты понимаешь person scortumee; 03.11.2020

    я пытаюсь добиться того, чтобы, допустим, у пользователя было 10 сеансов чата (каждый сеанс с другим пользователем). Я хочу прослушать все 10 сеансов чата. person scortumee; 03.11.2020

    тогда проверьте пакет rxdart. у него есть то, что вам нужно person scortumee; 09.11.2020

  2. scortumee

    Я решил свою проблему, используя функцию rxdart MergeStream, как предложил эмир адеджувон

    пожалуйста, проверьте этот документ stackoverflow.com/help/someone-answers person scortumee; 10.11.2020

    если предоставленный ответ был полезным, пометьте его как принятый, это поможет другим членам сообщества person scortumee; 11.11.2020

    да, я знаю об этой политике и полностью ее поддерживаю. Но фактический ответ не помог. Комментарий к нему был полезен. Так что я проголосовал за единственный комментарий person scortumee; 11.11.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: