Я реализую приложение чата один-к-одному, используя firestore, в котором есть коллекция с именем chat
, так что каждый документ коллекции отличается thread
.
Когда пользователь открываетприложение, на экране должны отображаться все темы / разговоры этого пользователя, включая те, которые имеют новые сообщения (как в WhatsApp).Очевидно, что один из методов заключается в получении всех документов из коллекции chat
, которые связаны с этим пользователем.
Однако это кажется очень дорогостоящей операцией, поскольку у пользователя может быть только несколько обновленных потоков (потоков с новыми сообщениями), но я должен получить все потоки.
Существует ли оптимизированный и менее затратный способ сделать то же самое, когда выбираются только те потоки, которые имеют новые сообщения или, точнее, потоки, которых нет на устройстве пользователякэш (новые или измененные потоки).
Каждый документ в коллекции chat
имеет следующие поля:
senderID: (id of the user who have initiated the thread/conversation)
receiverID: (id of the other user in the conversation)
messages: [],
lastMsgTime: (timestamp of last message in this thread)
В настоящее время для загрузки всех потоков определенного пользователя я подаю заявкуследующий запрос:
const userID = firebase.auth().currentUser.uid
firebase.firestore().collection('chat').where('senderId', '==', userID)
firebase.firestore().collection('chat').where('receiverId', '==', userID)
и, наконец, я объединяю документы, возвращенные этими двумя запросами, в массив для отображения в плоский список.