MongoDB聚合计数

时间:2014-04-02 01:58:58

标签: mongodb mapreduce aggregation-framework

我有这个结构

{
    "_id" : ObjectId( "42342342hj234h2j4h23j4h32j" ),
    "email" : "some@email.com",
    "points" : "5"
}

我有大约100k +文件。

我怎样才能得出这个结果:

{
    "frequency"   : 5
    "email_count" : 100
}
{
    "frequency"   : 4
    "email_count" : 24
}
{
    "frequency"   : 3
    "email_count" : 32
}

其中频率表示电子邮件在集合中出现的次数,电子邮件计数表示有多少电子邮件具有该特定频率 (例如some@email.com在数据集中出现5x,因为some1 @email.com,其中频率= 5,email_count = 2)

由于

1 个答案:

答案 0 :(得分:0)

您可以使用.aggregate()并使用“双”$group阶段来实现此类结果:

db.collection.aggregate([
    { "$group": {
        "_id": "$email",
        "frequency": { "$sum": 1 }
    }},
    { "$group": {
        "_id": "$frequency",
        "count": { "$sum": 1 }
    }}
])

因此,当您考虑到这一点时,第一阶段是“计算”集合中相同“电子邮件”地址的出现,这就是“频率”。

第二阶段,然后对这个“频率”值的相同事件进行“分组”,并“计算”找到相同值的次数。

熟悉聚合概念和available operators。这将非常值得。