Я пишу функцию агрегирования БД для получения ChatHeads
для пользователя из Messages
таблицы.
Ниже приведен объект сообщения из Messages
Таблица
{
"_id": "5c6e54c194509100146ea6da",
"chat_id": "5bc81391767ba50013bc251c5bc58ac0ff45070013383422",
"user1": "5bc58ac0ff45070013383422",
"user2": "5bc81391767ba50013bc251c",
"messageFrom": "5bc58ac0ff45070013383422",
"dateTime": "2019-02-21T07:35:29.653Z",
"message": "Hello ",
}
В зависимости от пользователя, который делает запрос, глава чата должна заполнить идентификатор другого пользователя, чтобы отобразить его имя / изображение в голове чата.
Я использую Агрегат, чтобы получить заголовки чата, но условное заполнениеУ меня проблема с другим пользователем. Ниже приведен мой текущий запрос, где req.user._id
- это идентификатор запрашивающего пользователя.
chat.aggregate(
{
$match: {
$or: [ { user1:req.user._id }, { user2:req.user._id } ]
}
},
{
$group:{
_id: '$chat_id',
entry: { $first: "$$ROOT" },
}
}
В моем понимании $lookup
с условием может помочь, гдеlocalField
должно измениться на entry.user1
или entry.user2
в зависимости от их значения.
Ниже приводится совокупная часть
$lookup: {
from: "users",
localField: < "entry.user1" or "entry.user2" depending upon condition> ,
foreignField: "_id",
as: "other_user"
}
Мои требования
localField
следуетскажем entry.user1
если entry.user1==req.user._id
localField
должны сказать entry.user2
если entry.user2==req.user._id