今天需要做一个筛选程序,因为数据放在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. shell 获取字符串的长度

    awk 方式 bogon:conf macname$ echo "abcde" | awk '{print length($0)}' 利用${#str}来获取字符串的长度 bogo ...

  2. UltraISO 下载

    链接:https://pan.baidu.com/s/1Wf0TmB8L9falKyGu8NwvBw 提取码:1cu8 参考: https://jingyan.baidu.com/article/cb ...

  3. TypeError: BlobBuilder is not a constructor

    var BlobBuilder = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window. ...

  4. UDS的使用

    我们通过对导热微分方程式的求解,并与Fluent自己的求解结果进行对比,介绍一下Fluent当中UDS(自定义标量)的具体使用方法. 首先Fluent当中的UDS主要针对下面这样形式的方程: 其中: ...

  5. Android开发:文本控件详解——TextView(二)文字跑马灯效果实现

    一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...

  6. 暑假gosh计划

    [要参与的事项]: 1.大创 2.CTF 3.ACM 4.自己的巴拉巴拉巴 [基本目标]: 1.大创 学完一本Java入门教材 学习Material Design,了解典型交互,进行ui初步设计 2. ...

  7. [Beta]Scrum Meeting#3

    github 本次会议项目由PM召开,时间为5月8日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 bh ...

  8. RFC-6455 The WebSocket Protocol 浅读

    什么是WebSokcet? WebSocket是一种协议,并且是各大主流浏览器作为客户端支持的协议.它的目标就是用来替代基于 XMLHTTPRequest和长轮询的解决方案.应用在时时弹幕,消息推送, ...

  9. VLC搭建RTSP服务器

    实时流协议 RTSP 是在实时传输协议的基础上工作的,主要实现对多媒体播放的控制.用户对多媒体信息的播放.暂停.前进和后退等功能就是通过对实时数据流的控制来实现的. 而这些播放控制功能的实现不仅需要多 ...

  10. DNA replication timing数据库 - Replication Domain

    DNA Replication Timing ReplicationDomain: a visualization tool and comparative database for genome-w ...