Proximo
Proximo

Reputation: 6531

Mongo Aggregation Grouping and Mapping of Object Array

I'm need to group a mongo collection and aggregate.

Example Collection

[{id:"1", skill: "cooking"},{id:"1", skill: "fishing"}]

Lookup Collection

[{ name: "cooking", value: 3 }, { name: "fishing", value: 2 }]

Desired Result

[{id: "1", skills: [{ value: 3, "cooking" }, { value: 2, "fishing"}]}]

Here's how far I am.

db.talent.aggregate([
    { 
        $group: '$id' 
        skills: { $addToSet: '$skill' }
    },
])

Result:

[{id: "1", skills: ["cooking", "fishing"]}]

I'm wondering if this is even possible.

I miss SQL, need help!

Upvotes: 0

Views: 690

Answers (1)

Clement Amarnath
Clement Amarnath

Reputation: 5466

We can do this using $lookup, $group and $project in the aggregation pipeline

Shown below is the mongodb shell query

db.example_collection.aggregate([
  {
    $lookup: {
      from: "lookup_collection",
      localField: "skill",
      foreignField: "name",
      as: "skills"
    }
  },
  {
    $group: {
      _id: "$id",
      skills: {
        $push: "$skills"
      }
    }
  },
  {
    $project: {
      "id": "$_id",
      "skills.name": 1,
      "skills.value": 1,
      "_id": 0
    }
  }
])

Upvotes: 1

Related Questions