Mongo $ group with $ project

Pra*_*rat 24 mongodb aggregation-framework

我正在尝试获取关键字计数parentId,categioryIdllcId.我的数据库是

{
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"),
    "keyword" : "electronic content management system",
    "llcId" : "CL1K9B",
    "categoryId" : "CL1K8V",
    "parentId" : "CL1K8V",

}
Run Code Online (Sandbox Code Playgroud)

我试过$project$group

db.keyword.aggregate([
    {
        $group: {
            _id: "$llcId",
            total: {$sum: 1},
        }
    },
    {
        $project: {
            categoryId: 1, total: 1
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

它给了我一个结果

{ "_id" : "CL1KJQ", "total" : 17 }
{ "_id" : "CL1KKW", "total" : 30 }
Run Code Online (Sandbox Code Playgroud)

但我需要的结果也如实际数据llcId,categoryId,keyword,total.我尝试使用显示cetgoryId和关键字,$project但它只显示_id和总计.我错过了什么?

chr*_*dam 36

要获得keyword计数,您需要按keyword字段对文档进行分组,然后使用累加器运算符$sum来计算文档数.至于其他字段值,由于您按照关键字值对所有文档进行分组,因此最好能够获取其他字段的是使用$first运算符,该运算符从每个组的第一个文档返回一个值.否则,您可能必须使用$push运算符为每个组返回字段值的数组:

var pipeline = [
    {
        "$group": {
            "_id": "$keyword",
            "total": { "$sum": 1 },
            "llcId": { "$first": "$llcId"},
            "categoryId": { "$first": "$categoryId"},
            "parentId": { "$first": "$parentId"}
        }
    }
];

db.keyword.aggregate(pipeline)
Run Code Online (Sandbox Code Playgroud)


小智 5

您正在分组,llcId因此categoryId每个分组将给多个分组llcId。如果需要categoryId,请在组查询中编写。例如:

db.keyword.aggregate([
{
    $group: {
        _id: "$llcId",
        total: {$sum: 1},
        categoryId:{$max:"$categoryId"}
    }

},
{
    $project: {
        categoryId: 1, total: 1
    }
}])
Run Code Online (Sandbox Code Playgroud)