我有这个结构
{
"_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)
由于
答案 0 :(得分:0)
您可以使用.aggregate()
并使用“双”$group
阶段来实现此类结果:
db.collection.aggregate([
{ "$group": {
"_id": "$email",
"frequency": { "$sum": 1 }
}},
{ "$group": {
"_id": "$frequency",
"count": { "$sum": 1 }
}}
])
因此,当您考虑到这一点时,第一阶段是“计算”集合中相同“电子邮件”地址的出现,这就是“频率”。
第二阶段,然后对这个“频率”值的相同事件进行“分组”,并“计算”找到相同值的次数。
熟悉聚合概念和available operators。这将非常值得。