如何解决MongoDB通过聚合分组
我有一个包含物品的集合,我想要的是一个汇总,其中我可以将所有item.recipes.life_skill.names按加热,烹饪等名称进行分组
我试图建立汇总,但我仍然不知道
{
_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,"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","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"
}
}
}
])
由于您只给出了一个文档,所以我使用组合_id
进行分组
_id: {
_id: "$_id",life_skill: "$recipes.life_skill.name"
}
这有助于按对象明智地分组。如果您需要对所有对象进行整体分组,只需使用
_id: "$recipes.life_skill.name"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。