Хорошо, так что я нашел лучший способ справиться с этим, и не стоит слишком фокусироваться на том, как сообщения существуют в базе данных. В итоге я использовал библиотеку веб-сокетов с именем socket.io. Мне удалось создать уникальные «комнаты» для каждой группы, которая подключается к серверу при загрузке страницы. Mongodb _id для сеанса сообщений используется для динамического создания комнаты следующим образом:
io.on('connection', async function(socket){
socket.on('session' async (session)=>{
socket.join(session.session_id); //not shown: session join authentication
});
socket.on('send', async (d)=>{
try{
const {text} = d.body;
const {token, session} = d.head;
//custom function that is async to parse jwt token and do db.MessageSession.create({})
const result = await socketMeassageAuthAndSend(session, token, text);
const {flag, user, _id, date} = result;
if(flag === 'auth'){
socket.broadcast.to(session).emit('socket_message_broadcast', {text,user,_id,date})
}else{
socket.emit("unauthorized", {message: "will place ip address here to send to admin panel"});
}}catch(err){
console.log(err);
}
});
Это работает для выполнения обновлений, которые аутентифицированы и авторизованы в базе данных mongo. Нет необходимости в управлении событиями из Мангуста, и он поддерживает синхронизацию базы данных с представлением пользователя в режиме реального времени.