Решение было таким:
Диалоги у пользователя хранятся в таком виде
"dialogues" : {
"58f9e5ff408da70504fede05" : [ // <---- человек по-переписке
{
"id" : ObjectId("590880f1c612893834123438") // <---- id сообщения, здесь могут быть дополнительные
}, // параметры. Например, скрыл ли его пользователь.
...
],
"58f9fcb6794ac63bf44bd61c" : [
{
"id" : ObjectId("5908a3470d59a45a64715bb2")
},
...
]
}
В схеме пользователя это пустой объект
dialogues: { }
Для сообщений существует отдельная коллекция.
После сохранения в коллекцию сообщений, отправителю и получателю в диалог к новой, или уже существующей переписке записывается id этого сообщения
User.findByIdAndUpdate(
userId,
{$push: {['dialogues.' + message.recipient]: {id: message._id}} },
{ safe: true, upsert: true },
function(err, user) {
if (err) console.log(err);
}
);
Вроде работает...