Pra*_*rat 24 mongodb aggregation-framework
我正在尝试获取关键字计数parentId,categioryId和llcId.我的数据库是
{
"_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)
| 归档时间: |
|
| 查看次数: |
31727 次 |
| 最近记录: |