0

I'm new to MongoDB aggregation. I am not getting desired output The output I'm getting from aggregation:-

[
{tweet:{key:value}},
{tweet:{key:value}},
{tweet:{key:value}},
{tweet:{key:value}},
]

but I want the following output from the pipeline:-

[
{key:value},
{key:value},
{key:value},
]

and lastly, pipeline I'm running:-

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)

I know I can do this with javascript but I want to do it with the pipeline

Henry Ecker
  • 34,399
  • 18
  • 41
  • 57
Prasadbro
  • 51
  • 7

2 Answers2

0

You can replace your last project stage with the following to achieve what you need:

{$project:{key:"$tweet.key"}}
R2D2
  • 9,410
  • 2
  • 12
  • 28
0

Answering my own question

i wanted to return sub-document so i found this https://stackoverflow.com/a/43411988/12332711

all i had to do is use

{
 $replaceRoot: {newRoot: "$tweet"}
 }

it worked for me

Prasadbro
  • 51
  • 7