最近遇到一个需求 查询mongdb 根据title字段分组 标题相同的统计数量 同时其他相关的字段也要展示.类似这样的sql
SELECT id,title , synopsis ,news_url ,COUNT(1) from crawl_news_info GROUP BY title LIMIT 10
网上搜到的最多的就是最简单的显示的字段 分组的字段 和 操作符的字段 例如
db.getCollection('baiduNewsSynopsisDto').aggregate([
{$match :{isShowMain:1}},
{$group:{_id:{title:'$title'}, count:{'$sum':1}}},
{$project:{_id:0,'title':'$_id.title',count:'$count'}}
])
相当于sql SELECT title , COUNT(1) from crawl_news_info GROUP BY title LIMIT 10 但是如果要展示其他的字段就没有办法了
冥冥之中让我发现了一个 $first 没错她来了 就是她 意思就是她的字面意思 取第一个,用法如下
db.getCollection('baiduNewsSynopsisDto').aggregate([
{$match :{isShowMain:1,isShow:1,mediaType:2,baseMonitorMainId:880}},
{$group:{_id:{title:'$title'}, count:{'$sum':1},newsUrl:{$first:'$newsUrl'},synopsis:{$first:'$synopsis'},source:{$first:'$source'}}},
{$project:{_id:0,'title':'$_id.title',count:'$count',newsUrl:'$newsUrl',synopsis:'$synopsis',source:'$source'}},
{$sort:{newsIssueTime:-1}},
{$skip:3},
{$limit:2}
])
希望可以对看到文章的朋友有所帮助
欢迎大家关注我的微信公众号 您的关注就是我不懈的动力