MongoDB aggregate聚合分组查询

聚合查询语句

// _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代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值