我有这个结构
{
"_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 在数据集中出现 5 倍,因此 some1@email.com 其中频率 = 5,email_count = 2)
谢谢
您可以使用
.aggregate()
和使用"双精度" $group
阶段来实现这种结果:
db.collection.aggregate([
{ "$group": {
"_id": "$email",
"frequency": { "$sum": 1 }
}},
{ "$group": {
"_id": "$frequency",
"count": { "$sum": 1 }
}}
])
因此,当您仔细考虑这一点时,第一阶段是"计算"集合中相同"电子邮件"地址的出现次数,这就是"频率"。
第二阶段,然后"分组"这个"频率"值的相同出现次数,并"计数"找到相同值的次数。
熟悉聚合概念和可用的运算符。这将是非常值得的。