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
  • 31,792
  • 14
  • 29
  • 50
Prasadbro
  • 11
  • 3

2 Answers2

0

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

{$project:{key:"$tweet.key"}}
R2D2
  • 6,113
  • 2
  • 6
  • 18
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
  • 11
  • 3