首页 > 解决方案 > MongoDB 对文档数组中的对象进行分组和计数

问题描述

我需要对对象中的数组进行分组和计数。我尝试了很多东西,但无法解决。

我有一个这样的 mongodb 文档:

[
    {
        "id" : 1,
        "name" : "A",
        "connected" : [
            {
                "iid" : 1,
                "risk" : "high"
            },
            {
                "iid" : 2,
                "risk" : "high"
            },
            {
                "iid" : 3,
                "risk" : "low"
            }
        ]
    }, 
    {
        "id" : 2,
        "name" : "B",
        "connected" : [
            {
                "iid" : 4,
                "risk" : "medium"
            },
            {
                "iid" : 5,
                "risk" : "medium"
            },
            {
                "iid" : 6,
                "risk" : "low"
            }
        ]
    },
    {
        "id":3,
        "name":"C"
    }
]

我想要一个查询,它给我这样的结果:

[
    {
        "id":1,
        "name":"A",
        "count": {
            "high" : 2,
            "low" : 1
        }
    },
    {
        "id":2,
        "name":"B",
        "count": {
            "medium" : 2,
            "low" : 1
        }
    },
    {
        "id":3,
        "name":"C"
    }
]

我在“$addFields”聚合查询中尝试了“$group”,但除了“$group”之外没有。

标签: databasemongodb

解决方案


您可以在聚合管道中执行以下操作:

  1. $unwind connected大批
  2. $group通过idconnected.risk得到计数
  3. $group通过id将结果放入 {k: , v: } 的数组中
  4. 用来$arrayToObject取回你想要的表格

这是Mongo游乐场供您参考。


推荐阅读