Я разрабатываю функцию обмена сообщениями.У меня есть коллекция пользователей, которая содержит такие вещи, как ID, имя и фамилия.У меня также есть коллекция сообщений, которая содержит массив значений, таких как идентификатор автора, тело сообщения и т. Д. И, наконец, у меня есть коллекция бесед, в которой есть идентификатор и участники, представляющие собой массив идентификаторов пользователей.
Я являюсьдумая, что это не очень хорошая структура, так как я хочу иметь возможность запускать запрос, который возвращает всех пользователей (ID, имя и фамилия), с которыми у данного пользователя есть история сообщений.Похоже, я не могу выполнить запрос, который вернет всю необходимую мне информацию.Нужно ли реструктурировать или есть способ выполнить этот запрос?
Вот пример структуры:
Conversation:
{ id: 123
participants: ['<user ID here>', '<user ID here>'],
}
User:{
id:654,
firstName: John
lastName: Doe
Message:
{ sender: 'john',
content: 'howdy',
time_created: new Date(),
converstationId: 123
},
{ sender: 'marry',
content: 'good u',
time_created: new Date(),
converstationId: 123
},
Я пробовал несколько вариантов из следующего, но яникогда не получал ничего, кроме пустого массива назад:
db.Users.aggregate([
{
$unwind: "$participants"
},
{
$lookup:
{
from: "conversations",
localField: "participants",
foreignField: "_id",
as: "response"
}
},
{
$match: { "response": { $ne: [] } }
}
])
Итак, мой вопрос: как я могу получить всех пользователей, которые соответствуют идентификаторам пользователей в массиве участников?