具有聚合的MongoDB group by

具有聚合的MongoDB group by,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个物品的集合,我想要的是一个集合,在这里我可以得到所有的物品。食谱。生活技能。名称按名称分组,如加热,烹饪等 我试图建立聚合,但我仍然不知道 { _id: "recipes.life_skill.name", "life_skill": { $first: "recipes.life_skill.name" } } 以下是此类项目的示例: { "_id": { "

我有一个物品的集合,我想要的是一个集合,在这里我可以得到所有的物品。食谱。生活技能。名称按名称分组,如加热,烹饪等

我试图建立聚合,但我仍然不知道

{
  _id: "recipes.life_skill.name",
  "life_skill": {
    $first: "recipes.life_skill.name"
  }
}
以下是此类项目的示例:

{
   "_id": {
      "$oid": "5f87ddc65a997f69083d663d"
   },
   "id": "756005",
   "global_id": "item--756005",
   "category": "Special Items",
   "name": "Lunar Black Stone",
   "grade": 3,
   "weight": "0.01",
   "required_level": 1,
   "url": null,
   "icon_url": null,
   "recipes": [{
       "global_id": "mrecipe--2103",
       "id": "2103",
       "life_skill": {
           "name": "Heating",
           "rank": "Beginner",
           "level": 1
       },
       "xp_amount": null,
       "url": null,
       "input_products": [{
           "type": "ITEM",
           "id": "756002",
           "name": "Frosted Black Stone",
           "quantity": 10,
           "url": null
       }, {
           "type": "ITEM",
           "id": "756003",
           "name": "Starlight Crystal",
           "quantity": 1,
           "url": null
       }],
       "output_products": [{
           "type": "ITEM",
           "id": "756005",
           "name": "Lunar Black Stone",
           "quantity": 1,
           "url": null
       }],
       "product_groups": []
   }],
   "used_in_recipes": null,
   "ship_upgrades": null,
   "achievements": null
}

您需要先执行
$unwind
来分解阵列结构

db.collection.aggregate([
  {
    $unwind: "$recipes"
  },
  {
    $group: {
      _id: {
        _id: "$_id",
        life_skill: "$recipes.life_skill.name"
      },
      life_skill: {
        $first: "$recipes.life_skill.name"
      }
    }
  }
])
因为您只提供了一个文档,所以我使用了组合的
\u id
来分组

_id: {
        _id: "$_id",
        life_skill: "$recipes.life_skill.name"
      }
这有助于按每个对象进行分组。如果需要对所有对象进行整体分组,只需使用

_id: "$recipes.life_skill.name"

工作

首先需要执行
$unwind
来分解阵列结构

db.collection.aggregate([
  {
    $unwind: "$recipes"
  },
  {
    $group: {
      _id: {
        _id: "$_id",
        life_skill: "$recipes.life_skill.name"
      },
      life_skill: {
        $first: "$recipes.life_skill.name"
      }
    }
  }
])
因为您只提供了一个文档,所以我使用了组合的
\u id
来分组

_id: {
        _id: "$_id",
        life_skill: "$recipes.life_skill.name"
      }
这有助于按每个对象进行分组。如果需要对所有对象进行整体分组,只需使用

_id: "$recipes.life_skill.name"
工作