Home > Software engineering >  how to get expected output from mongodb
how to get expected output from mongodb

Time:03-19

im new to mongodb aggregation i im not gettign desired output The output im getting from aggregation :-

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

but i want following output from pipeline:-

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

and lastly pipelie im 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 with pipeline

CodePudding user response:

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

{$project:{key:"$tweet.key"}}

CodePudding user response:

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

  • Related