聚合查询语句
// _id为固定写法
db.collection.aggregate([{$group : {_id : "$source", total : {$sum : 1}}}])
{
"result" : [
{
"_id" : "36kr",
"total" : 2
},
{
"_id" : "sina",
"total" : 1
}
],
"ok" : 1
}
语句类似
select source, count(*) from collection group by source
常用操作
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$sort:将输入文档排序后输出。
实现类似SQL中的语句
select * from table
where synState = 0 and starttime >=to_date('2019-08-02','yyyy-MM-dd')
group by stunum
having count(1) >1
db.getCollection("table").aggregate([
//下面相当于sql 里面的 where synState = 0 and starttime >=to_date('2019-08-02','yyyy-MM-dd')
{$match:{synState:0,"starttime":{$gte:new Date("2019-08-02")}}},
//下面相当于sql 里面的group by分组 分组字段为 stunum,starttime去掉了时分秒分组
{$group:{_id:{stunum : "$stunum" , starttime: {
month: { $month: "$starttime" },
day: { $dayOfMonth: "$starttime" },
year: { $year: "$starttime"}
}},counter:{$sum:1}}},
//下面相当于sql 里面的 having count(1) >1
{$match:{counter:{$gt:1}}}
]);
参考
https://www.runoob.com/mongodb/mongodb-aggregate.html
mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码