Мне кажется (я могу ошибаться), что если при получении каждого нового сообщения сохранять его в базу (что-то типа ChatModel.findByIdAndUpdate(chat._id)), то это будет сильно нагружать процессор.
Зависит от способа организации данных, от самих данных, от нагрузки. Одно дело, когда одновременно ведут диалог 10 человек и другое, когда 10 миллионов.
Можно делать по-другому: записывать все прилетающие сообщения в переменную. Затем каждые, например, N сообщений делать апдейт поля в базе, конкатинируя получившуюся строку с уже хранящейся.
1. Это ненадёжно. Например, у тебя работает 15 разработчиков, каждый из них деплоит 2 раза в день в течении рабочего дня. Итого, каждые ~16 минут у всех теряется несколько рандомных сообщений.
2. Ты хочешь сохранять каждые N сообщений. Представь, что я написал N-1 сообщений и потерялся на год. Уж за год сервер точно один раз передеплоят и все мои сообщения потеряются. Здесь нужны таймеры
В общем, посоветуйте хороший способ реализации быстрого и не слишком затратного способа сохранять историю чата
Установить rocketchat/mattermost/etc.
А если серьёзно, то проводи нагрузочные тесты. Если юзеров будет 1.5 землекопа — сделай просто "как-нибудь". Вот когда миллионы юзеров будут, тогда приходи... А стоп, когда у тебя будут миллионы юзеров, у тебя хватит денег нанять людей, которые перепишут как надо