【问题标题】:MongoDB Aggregated CountMongoDB 聚合计数
【发布时间】:2014-04-02 01:58:58
【问题描述】:

我有这个结构

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

我有大约 10 万多个文档。

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

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

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

谢谢

【问题讨论】:

    标签: mongodb mapreduce aggregation-framework


    【解决方案1】:

    您可以使用.aggregate() 和使用“双”$group 阶段来实现这种结果:

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

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

    第二阶段,然后对该“频率”值的相同出现次数进行“分组”,并“计数”找到相同值的次数。

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

    【讨论】:

    • 您好,感谢您指出这一点。因为我对 MongoDb 很陌生。看来我得做更多的阅读
    猜你喜欢
    • 2016-12-25
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2015-03-10
    相关资源
    最近更新 更多