Mongo聚合分组和对象数组的映射

时间:2018-05-09 15:20:12

标签: mongodb group-by aggregate

我需要将mongo集合分组并聚合。

示例集合

  

[{id:“1”,技能:“烹饪”},{id:“1”,技能:“钓鱼”}]

Lookup Collection

  

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

期望的结果

  

[{id:“1”,技能:[{值:3,“烹饪”},{值:2,“钓鱼”}]}]

这是我的目标。

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

结果:

  

[{id:“1”,技能:[“烹饪”,“钓鱼”]}]

我想知道这是否可行。

我想念SQL,需要帮助!

1 个答案:

答案 0 :(得分:1)

我们可以使用$lookup管道中的$group$projectaggregation来执行此操作

下面显示的是mongodb shell查询

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
    }
  }
])