gpt4 book ai didi

mysql - MongoDB 复杂的按功能选择计数组

转载 作者:可可西里 更新时间:2023-11-01 08:27:59 25 4
gpt4 key购买 nike

我有一个名为“my_emails”的集合,其中存储了电子邮件地址:

[
{ email:"russel@gmail.com"},
{ email:"mickey@yahoo.com"},
{ email:"john@yahoo.com"},
]

然后我尝试使用前 10 个主机名...

[
{host: "gmail.com", count: 1000},
{host: "yahoo.com", count: 989}, ...
]

如果我有 MySQL,我会做这个查询:

SELECT substr(email,locate('@',email)+1,255) AS host,count(1) AS count
FROM my_emails
WHERE email like '%@%'
GROUP BY substr(email,locate('@',email)+1,255)
ORDER BY count(1) DESC
LIMIT 10

我该如何处理 mongodb ?我尝试没有结果是这样的:

db.my_emails.aggregate([ { $group : {_id : "$host", count : { $sum : 1 }}}]);

我不知道如何在不向我的记录中添加新属性的情况下生成 $host 值

最佳答案

MongoDB 不提供任何运算符,如 locate 但您可以使用 .mapReduce这样做:

db.collection.mapReduce(
function() {
emit(this.email.substr(this.email.indexOf('@') + 1), 1);
},
function(host, count) {
return Array.sum(count) ; },
{ out: "hosts" }
)

然后 db.hosts.find().sort({ 'value': -1 }).limit(10) 返回前 10 个主机名:

{ "_id" : "yahoo.com", "value" : 2 }
{ "_id" : "gmail.com", "value" : 1 }

关于mysql - MongoDB 复杂的按功能选择计数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com