将数组中的元素推入 mongodb 中的单个数组

Push elements from arrays into a single array in mongodb

我的文档结构:

{
    "_id" : ObjectId("59edc58af33e9b5988b875fa"),
    "Agent" : {
        "Name" : "NomanAgent",
        "Location" : "Lahore",
        "AgentId" : 66,
        "Reward" : "Thumb Up",
        "Suggestion" : [ 
            "Knowledge", 
            "Professionalisn"
        ]
    }
}

我想在这个查询中实现什么: 我想找到客户给每个代理的每个建议的计数,它应该看起来像,

{
    "AgentName": "Xyz",
    "SuggestionCounts": {
         "Knowledge": 2,
         "Professionalism": 3,
         "Friendliness": 1
     }
} 

到目前为止我做了什么,

db.getCollection('_survey.response').aggregate([
    {
        $group:{
            _id: "$Agent.Name",
            Suggestions: {$push:"$Agent.Suggestion"}
        }
    }
]);

输出:

/* 1 */
{
    "_id" : "GhazanferAgent",
    "Suggestions" : [ 
        [ 
            "Clarity", 
            "Effort"
        ], 
        [ 
            "Friendliness"
        ]
    ]
}

/* 2 */
{
    "_id" : "NomanAgent",
    "Suggestions" : [ 
        [ 
            "Knowledge", 
            "Professionalisn"
        ]
    ]
}

我希望它变成什么样(因为文档中的建议是一个数组,当我按 Agent.Name 对文档进行分组时,它变成了数组的数组,如我的输出所示,它想要合并所有数组将其复制成单个,然后我将找到数组中每个元素的计数):

/* 1 */
    {
        "_id" : "GhazanferAgent",
        "SuggestionsCombined" : [ 
            [ 
                "Clarity", 
                "Effort",
                "Friendliness"
            ]
        ]
    }

    /* 2 */
    {
        "_id" : "NomanAgent",
        "SuggestionsCombined" : [ 
            [ 
                "Knowledge", 
                "Professionalisn"
            ]
        ]
    }

提前致谢!!

一种方法是这样的 - 输出结构与您建议的不同,但可能足够接近:

db.getCollection('_survey.response').aggregate([
    {
        $unwind: "$Agent.Suggestion" // flatten "Suggestion" array
    }, {
        $group:{ // group by agent and suggestion
            _id: { "AgentName": "$Agent.Name", "Suggestion": "$Agent.Suggestion" },
            "Count": { $sum: 1} // calculate count of occurrencs
        }
    }, {
        $group:{
            _id: "$_id.AgentName", // group by agent only
            "Suggestions": { $push: { "Suggestion": "$_id.Suggestion", "Count": "$Count" } } // create array of "Suggestion"/"Count" pairs per agent
        }
    }
]);