Я не могу найти решение, используя другие ответы на inte rnet или мои попытки. Вот почему я создаю новый вопрос.
У меня есть 2 коллекции - сообщений , пользователей , и я использую MongoDB + Mon goose.
Как я могу использовать агрегат, чтобы все пользователи принадлежали к определенной записи?
Мне нужно что-то вроде заполнить , но мне нужно использовать агрегат (я использую более сложный агрегат, это просто пример)
У меня есть поле лайки который содержит всех пользователей , которым понравился определенный пост. Так что likes.users.user содержит идентификатор для понравившегося пользователя.
Как я могу изменить это поле через агрегат для хранения объекта с пользовательской информацией вместо просто идентификатора? См. желаемый вывод , пожалуйста.
До совокупного вывода:
{
"_id": "5eb011af5c9246204944156e",
"title": "My awesome blog post",
"likes": {
"count": 3,
"users": [
{
"_id": "5eb011ba5c92462049441570",
"user": "5e915d5e116d010560470107"
},
{
"_id": "5eb012535c92462049441576",
"user": "5e915d76116d010560470108"
},
{
"_id": "5eb018d57ae41a2171478ff1",
"user": "5e915d8b116d010560470109"
}
]
}
}
Желаемый вывод:
{
"_id": "5eb011af5c9246204944156e",
"title": "My awesome blog post",
"likes": {
"count": 3,
"users": [
{
"_id": "5eb011ba5c92462049441570",
"user": {
"_id": "5e915d5e116d010560470107",
"name": "John Doe",
"role": "member"
}
},
{
"_id": "5eb011ba5c92462049441576",
"user": {
"_id": "5e915d5e116d010560470108",
"name": "Daniel Grant",
"role": "member"
}
},
{
"_id": "5eb018d57ae41a2171478ff1",
"user": {
"_id": "5e915d5e116d010560470109",
"name": "Tiffany Holland",
"role": "administrator"
}
}
]
}
}
Текущий неверный вывод:
{
"_id": "5eb011af5c9246204944156e",
"title": "My awesome blog post",
"likes": {
"count": 3,
"users": [
{
"_id": "5eb011ba5c92462049441570",
"user": {
"_id": "5e915d5e116d010560470107",
"name": "John Doe",
"role": "member"
}
},
{
"_id": "5eb011ba5c92462049441576",
"user": {
"_id": "5e915d5e116d010560470107",
"name": "John Doe",
"role": "member"
}
},
{
"_id": "5eb018d57ae41a2171478ff1",
"user": {
"_id": "5e915d5e116d010560470107",
"name": "John Doe",
"role": "member"
}
}
]
}
}
Это в основном то, что мне нужно, но это только один пользователь из 3, и он показывает дубликаты. Почему?
Совокупность, которую я пробовал:
const aggregatedData = await Post.aggregate([
{ $match: { _id: mongoose.Types.ObjectId( id ) } },
{
$lookup: {
from: "users",
localField: "likes.users.user",
foreignField: "_id",
as: "likesUsers"
}
},
{
$unwind: "$likesUsers"
},
{
$addFields: {
"likes.users.user": "$likesUsers",
}
},
{
$project: {
"likesUsers": 0,
}
}
]);
Спасибо