规范化MongoDB的结果

时间:2014-10-26 05:29:22

标签: mongodb aggregation-framework

我需要在MongoDB表上执行以下操作。我需要根据一些列值过滤文档,我需要按列分组并根据聚合查找值的计数。此外,我想规范化计数值(即,将结果的计数值除以该结果的最大计数值)。

我已使用聚合管道的 $ match $ group 参数完成了前两个步骤。我不确定如何对结果部分进行标准化。

我当前的查询看起来像这样

db.list_input_file.aggregate([ 
 {$match:{ 'content.Year' : {$eq : '2006'} }}, 
 {$group:{'_id':'$content.Author', count:{$sum:1}}} 
])

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"
    }
} ]);