Я новичок в агрегации MongoDB. Я не получаю желаемого результата Результат, который я получаю от агрегации: -
[
{tweet:{key:value}},
{tweet:{key:value}},
{tweet:{key:value}},
{tweet:{key:value}},
]
но мне нужен следующий вывод из конвейера: -
[
{key:value},
{key:value},
{key:value},
]
и, наконец, конвейер, который я запускаю: -
const pipeline = [[
{
$match: {
$expr: {
$in: [
Mongoose.Types.ObjectId(userid), '$likedBy.user'
]
}
}
}, {
$lookup: {
from: 'tweets',
localField: 'tweet',
foreignField: '_id',
as: 'tweet'
}
}, {
$unwind: {
path: '$tweet'
}
}, {
$lookup: {
from: 'users',
localField: 'tweet.user',
foreignField: '_id',
as: 'user'
}
}, {
$unwind: {
path: '$user'
}
}, {
$addFields: {
'tweet.user': '$user'
}
},
{
$addFields: {
'tweet.isLiked': true,
}
},{
$project:{
tweet:1,
}
},
]
];
const likedTweets = await TweetLike.aggregate(pipeline)
Я знаю, что могу сделать это с помощью javascript, но я хочу сделать это с помощью конвейера.
Вы можете заменить свой последний этап проекта следующим, чтобы достичь того, что вам нужно:
{$project:{key:"$tweet.key"}}
Отвечая на мой собственный вопрос
я хотел вернуть поддокумент, поэтому нашел этот https://stackoverflow.com/a/43411988/12332711
все, что мне нужно было сделать, это использовать
{
$replaceRoot: {newRoot: "$tweet"}
}
это сработало для меня