今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴

需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条数据或以上才符合同步条件)

这是mongoDB原生语句

db.getCollection("ClassRecordOneDetail").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}}}
]);

这是java代码

import com.mongodb.client.MongoCursor;

import com.mongodb.client.MongoCollection;

import org.bson.Document;

import com.mongodb.client.MongoCursor;

/**

*这里我就写出了mongoDB我使用的类,其他的导入类型我没写。

*

**/

MongoCollection<Document> mc = MongoDBUtil.instance.getCollection("dzwl", "ClassRecordOneDetail");

Document sub_match = new Document();
sub_match.put("subState", 0);
sub_match.put("starttime", new Document("$gte", date)); Document sub_group = new Document();
sub_group.put("_id", new Document("stunum","$stunum").append(
"starttime", new Document("month",new Document("$month","$starttime")).append("day",new Document("$dayOfMonth","$starttime")).append("year",new Document("$year","$starttime"))
));
sub_group.put("counter", new Document("$sum", 1)); Document match = new Document("$match", sub_match);
Document group = new Document("$group", sub_group);
Document match2 = new Document("$match", new Document("counter",new Document("$gt", 1))); List<Document> documents = new ArrayList<>();
documents.add(match);
documents.add(group);
documents.add(match2); MongoCursor<Document> cursor = mc.aggregate(documents).iterator(); //下面直接遍历查询查来的数据就可以了 MongoCursor<Document> cursor = mc.aggregate(documents).iterator();
try {
while(cursor.hasNext()){ } } catch (Exception e) {
  // TODO: handle exception
}

mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码的更多相关文章

  1. NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...

  2. C#EF中,使用类似于SQL中的% 模糊查询

    最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF ...

  3. C# Lamda中类似于SQL 中的 In 功能

    首先,在程序中接受一个数组 例如:int[] s=[1,2,3]; 在Lamda表达式中使用如下: db.userinfo.where(u=>s.Contains(u.id)); 等同于sql语 ...

  4. MongoDB中的group

    在Mongodb的查询中,有类似于SQL中group by功能的group函数.两者的功能有些类似,但是区别也是比较明显的. 对于SQL来说,group by的作用就是安装依据列来将数据表中的记录分成 ...

  5. Pandas 分组聚合 :分组、分组对象操作

    1.概述 1.1 group语法 df.groupby(self, by=None, axis=0, level=None, as_index: bool=True, sort: bool=True, ...

  6. MySQL进阶5--分组函数 / 分组排序和分组查询 group by(having) /order by

    MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数 ...

  7. SQL语句(三)分组函数和分组查询

    目录 一.分组函数 特点 1. 各函数的简单使用 2. 搭配distinct的使用 3. COUNT 统计行数 4. 和分组函数一同查询的字段要求是group by后的字段 二.分组查询 1. 简单应 ...

  8. Django之无名分组,有名分组

    在Django 2.0版本之前,在urls,py文件中,用url设定视图函数 urlpatterns = [ url(r'login/',views.login), ] 其中第一个参数是正则匹配,如下 ...

  9. 在mysql中使用group by和order by取每个分组中日期最大一行数据

    转载自:https://blog.csdn.net/shiyong1949/article/details/78482737 在mysql中使用group by进行分组后取某一列的最大值,我们可以直接 ...

随机推荐

  1. ERA-Interim数据学习

    1.气象再分析数据有很多种,看文献里用到的主要有这几种 ECWRF——ERA-Interim,分辨率0.125°,欧洲的 MERRA-2,分辨率0.625°*0.5°,NASA的 GEOS-5FP,分 ...

  2. xcode7: Undefined symbols for architecture i386: "_iconv_open", referenced from:

    在整合cocos和quick时,出现这个错误,我按照以前的方法 link binary with libraries 中add libiconv.2.dylib ,发现已经没有了这个库. 网上找了一下 ...

  3. portaudio使用笔记《转》

    原文链接:https://blog.csdn.net/gg_simida/article/details/77185755 介绍 PortAudio是一个免费.跨平台.开源的音频I/O库.看到I/O可 ...

  4. 微信小程序 input 的 type属性 text、number、idcard、digit 区别

    微信小程序的 input 有个属性叫 type,这个 type 有几个可选值: text:不必解释 number:数字键盘(无小数点) idcard:数字键盘(无小数点.有个 X 键) digit:数 ...

  5. redhat 6安装python 3.7.4报错ModuleNotFoundError: No module named '_ctypes' make: *** [install] Error 1

    问题描述: 今天在测试环境中,为了执行脚本,安装下python3命令,在执行make install的时候报错: ModuleNotFoundError: No module named '_ctyp ...

  6. 泡泡一分钟:Geometric and Physical Constraints for Drone-Based Head Plane Crowd Density Estimation

    张宁 Geometric and Physical Constraints for Drone-Based Head Plane Crowd Density Estimation 基于无人机的向下平面 ...

  7. 容器docker快速入门

    一.概述 什么是docker docker是一个应用容器引擎,通俗的讲,docker和我们的vm虚拟机有很多相似的地方,当然也有很多不同的地方 Docker理念是将应用及依赖包打包到一个可移植的容器中 ...

  8. 解决ImportError: No module named utils

    转载:https://blog.csdn.net/weixin_43979572/article/details/86159265 在Python中遇到了导包错误,其实包已经有了.原因是我再B文件的a ...

  9. SQL 对比,移动累计

    数据对比 两种常用模型 1.对比下一行,判断增长.减少.维持现状 -- 建表 drop table sales create table sales( num int, soc int ); inse ...

  10. Windows下启动、重启、停止nginx

    在Windows下操作nginx,需要打开cmd 进入到nginx的安装目录下 1.启动nginx: start nginx 或 nginx.exe 2.停止nginx(stop是快速停止nginx, ...