Если вы храните чаты в отдельной коллекции, что вас волнует, если существуют более ранние документы чата? Если ваша структура ваша схема как:
chatRecord: {
participants: [
{participantID},
{participantID},
...
],
messages: [/* array of messages */],
dateTag: {timestamp}
}
... вы можете тривиально запросить идентификаторы участников в массиве; ни один конкретный документ чата никогда не станет особенно большим; Вы можете сортировать их как хотите. Вы можете запрашивать, сортировать и объединять все чаты за любой выбранный вами период времени практически для любой комбинации участников. Единственная причина НЕ хранить каждое сообщение отдельно - это возможно уменьшить количество документов, прочитанных или написанных за один раз, но я сомневаюсь, что это будет важно в приложении чата.
Запомните это Нет SQL - по сути рекомендуется реплицировать данные c stati, например имена участников, в отдельные документы для более быстрых и эффективных запросов. DRY для SQL. Firestore основан на предположении, что запросы настолько эффективны, что вы действительно не должны заботиться о documentID, и при этом вы не должны пытаться втиснуть как можно больше в какой-либо отдельный документ.