具有聚合的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"
工作