Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB aggregate returning only specific fields

I have the following code:

const profiles = await Profile.aggregate([
      {
        $lookup: {
          from: "users",
          localField: "user",
          foreignField: "_id",
          as: "user",
        },
      },
      {
        $unwind: "$user",
      },
      {
        $match: {
          "user.name": {
            $regex: q.trim(),
            $options: "i",
          },
        },
      },
      {
        $skip: req.params.page ? (req.params.page - 1) * 10 : 0,
      },
      {
        $limit: 11,
      },
      {
        $group: {
          _id: "$_id",
          skills:{skills}
          user: { name: "$name" },
          user: { avatar: "$avatar" },
        },
      },
    ]);

I want to return only specific fields like skills _id and user.name and user.avatar, but this doesn't work. I'm pretty sure that the problem is in $group. I want to receive only these fields

 [
   {
     _id: 5ef78d005d23020ca847aa76,
     skills: [ 'asd' ],
     user: {
       _id: 5ef78c7c5d23020ca847aa75,
       name: 'Simeon Lazarov',
       avatar: 'uploads\\1593286096227 - background.jpg',
     }
   }
 ]
like image 342
Simeon Lazarov Avatar asked Apr 17 '26 20:04

Simeon Lazarov


1 Answers

You can make use of $project to get specific fields.

After grouping add the below:

{
 $project: {_id:1, skills:1, user:1}
}

Projection value of 0 means that the field needs to be excluded, Value 1 represents inclusion of the field.

Document reference: https://docs.mongodb.com/manual/reference/operator/aggregation/project/

like image 139
Faizul Hassan Avatar answered Apr 20 '26 23:04

Faizul Hassan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!