MongoDB-按内部文档分组并检索顶级结果

MongoDB-按内部文档分组并检索顶级结果,mongodb,mongoose,Mongodb,Mongoose,我试图找到mongo数据库中存储的最常见(和最不常见)的技能。我正在使用mongoose检索结果 用户是根文档,每个根文档都有一个内部的配置文件文档。配置文件具有“skills”属性,其中包含一个数组ProfileSkillEntry,该数组具有标题(技能名称) 我希望它将所有注册用户的技能结合在一起,找到前5名并返回。相反,它似乎是按用户分组,并给出无效的结果 示例用户文档结构: { "_id" : ObjectId("..."), "firstName" : "Harry",

我试图找到mongo数据库中存储的最常见(和最不常见)的技能。我正在使用mongoose检索结果

用户
是根文档,每个根文档都有一个内部的
配置文件
文档。配置文件具有“skills”属性,其中包含一个数组
ProfileSkillEntry
,该数组具有
标题(技能名称)

我希望它将所有注册用户的技能结合在一起,找到前5名并返回。相反,它似乎是按用户分组,并给出无效的结果

示例
用户
文档结构:

{
    "_id" : ObjectId("..."),
    "firstName" : "Harry",
    "lastName" : "Potter",
    "profile" : {
        "_id" : ObjectId("..."),
        "skills" : [
            {
                "_id" : ObjectId("..."),
                "title" : "Java",
                "description" : "Master",
                "dateFrom" : "31/07/2019",
                "coreSkill" : true
            },
            {
                "_id" : ObjectId("..."),
                "title" : "JavaScript",
                "description" : "Proficient",
                "dateFrom" : "31/07/2019",
                "coreSkill" : false
            }
        ],
    }
}

请使用下面的查询。只需根据您的要求添加排序和限制

db.test.aggregate(
[{ $unwind: {  path: "$profile.skills"} }, 
{ $group: {  _id: "$profile.skills.title",  
    "count": {    $sum: 1  }} }] )

请使用下面的查询。只需根据您的要求添加排序和限制

db.test.aggregate(
[{ $unwind: {  path: "$profile.skills"} }, 
{ $group: {  _id: "$profile.skills.title",  
    "count": {    $sum: 1  }} }] )

请张贴您的产品样本document@Anban包括示例用户文档。请发布您的示例document@Anban包括示例用户文档。太棒了!谢谢,太棒了!非常感谢。