我需要在MongoDB表上执行以下操作。我需要根据一些列值过滤文档,我需要按列分组并根据聚合查找值的计数。此外,我想规范化计数值(即,将结果的计数值除以该结果的最大计数值)。
我已使用聚合管道的 $ match 和 $ group 参数完成了前两个步骤。我不确定如何对结果部分进行标准化。
我当前的查询看起来像这样
db.list_input_file.aggregate([
{$match:{ 'content.Year' : {$eq : '2006'} }},
{$group:{'_id':'$content.Author', count:{$sum:1}}}
])
答案 0 :(得分:2)
我认为可以通过(代码中的说明)来完成
db.list_input_file.aggregate([ {
$match : {
'content.Year' : {
$eq : '2006'
}
}
}, {
$group : {
'_id' : '$content.Author',
count : {
$sum : 1
}
}
}, {
$group : {
_id : 0,
maxCount : { // get the largest count value
$max : "$count"
},
docs : { // push all documents into one field to store as an array
$push : "$$ROOT"
}
}
}, {
$project : {
_id : 0,
docs : {
$map : {
"input" : "$docs",
"as" : "e",
"in" : { // retrieve each element
_id : "$$e._id",
count : "$$e.count",
rate : { // add the normalized value here
$divide : [ "$$e.count", "$maxCount"]
}
}
}
}
}
}, {
$unwind : "$docs"
}, {
$project : {
_id : "$docs._id",
count : "$docs.count",
rate : "$docs.rate"
}
} ]);