skip to Main Content

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

2

Answers


  1. Chosen as BEST ANSWER

    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


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

    {$project:{key:"$tweet.key"}}
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search