@Override
public MessageDto getCheckInMembersByFlight(String fltDt, String fltNr, String channel,String origincd,String destcd) {
log.info("请求参数:"+"fltDt:"+fltDt+",fltNr:"+fltNr+",channel:"+channel+",origincd:"+origincd+",destcd:"+destcd);
MessageDto messageDto = new MessageDto();
boolean flag = (null !=fltDt&&!("").equals(fltDt)
&&null !=fltNr&&!("").equals(fltNr)
&&null !=channel&&!("").equals(channel)
&&null !=origincd&&!("").equals(origincd)
&&null !=destcd&&!("").equals(destcd))
&&(channel.equals("WX")|channel.equals("APP"));
if (flag) {
String fltDtStr = fltDt.replace("-","")+"000000";
//分组的依据psgId
DBObject keys = new BasicDBObject("psgId", true);
//dbObject为检索条件,检索出符合业务的数据
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("fltDt", fltDtStr);
String fltNrSub = fltNr.substring(2);
dbObject.put("fltNr", fltNrSub);
dbObject.put("checkinStatus", "AC");
dbObject.put("originCd", origincd);
dbObject.put("destCd",destcd );
//设定下面函数的初始值:prev的字段dcsTimestamp的初始值,用于做比较取dcsTimestamp的最大值
DBObject initial = new BasicDBObject("dcsTimestamp", "0");
//这个属于js的语法,这个脚本用于在psgId组内,比较出较大的dcsTimestamp,并且取出这条数据中要返回的值
//注意后面的赋值要有dcsTimestamp的赋值,不然得出的数据不准确
String reduce = "function(doc,prev){" +
"var docDcsTimestamp=doc.dcsTimestamp;" +
"var prevDcsTimestamp=prev.dcsTimestamp;" +
"var docDcsTimestampInt=parseInt(docDcsTimestamp);" +
"var prevDcsTimestampInt=parseInt(prevDcsTimestamp);" +
"if(docDcsTimestampInt > prevDcsTimestampInt){" +
"prev.fqNo=doc.fqNo;" +
"prev.credentNo=doc.credentNo;" +
"prev.chnName=doc.chnName;prev.dcsTimestamp=doc.dcsTimestamp;}" +
"}";
BasicDBList dbList = (BasicDBList) mongoTemplate.getCollection("b_dep_pnr_psg").group(keys, dbObject, initial, reduce);
log.info("分组处理成功");
JSONArray resultJson = new JSONArray();
for (int i = 0; i < dbList.size(); i++) {
//取出最终的得到数据中的要返回的参数,封装到map转json返回。添加name和证件号不为空判断,其中一个为空不返回
JSONObject jsStr = JSONObject.parseObject(dbList.get(i).toString());
String fqNoStr = (String) jsStr.get("fqNo");
String chnName = (String) jsStr.get("chnName");
String credentNo = (String) jsStr.get("credentNo");
Map<String, String> map = new HashMap<String, String>();
ObjectMapper mapJson = new ObjectMapper();
if(null!=chnName&&!chnName.equals("")&&null!=credentNo&&!credentNo.equals("")){
map.put("fqNo", fqNoStr);
map.put("name", chnName);
map.put("credentNo", credentNo);
}else{
continue;
}
String params = null;
JSONObject resultJsonObiect = null;
try {
params = mapJson.writeValueAsString(map);
resultJsonObiect = JSONObject.parseObject(params);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
resultJson.add(resultJsonObiect);
}
messageDto.setMessage("成功");
messageDto.setCode("0");
messageDto.setContent(resultJson);
} else {
messageDto.setMessage("参数个数不对");
messageDto.setCode("10001");
messageDto.setContent(null);
} return messageDto;
}

  2、分组也可,

public void query1(){
String mondburl = Config.getInstance().getProperty("mongodb.host");
MongoClientOptions options = new MongoClientOptions.Builder().socketKeepAlive(true).build();
Mongo client = new MongoClient(mondburl, options);
DB database = client.getDB("pnr");
DBCollection coll = database.getCollection("b_dep_pnr_flt"); //条件
DBObject dbObject = new BasicDBObject();
dbObject.put("alnCd", "CZ");
dbObject.put("fltNr", "3452");
dbObject.put("fltDt", "20180425000000");
dbObject.put("arvCd", "SZX");
dbObject.put("depCd", "LJG");
//FindIterable<Document> dbCursor = col.find((Bson) dbObject);
/*创建 $match, 作用相当于query*/
DBObject match = new BasicDBObject("$match", dbObject); /* Group操作*/
DBObject groupFields = new BasicDBObject("_id",null);
groupFields.put("MAXDcsTimestamp", new BasicDBObject("$max", "$dcsTimestamp"));
DBObject group = new BasicDBObject("$group", groupFields); /* 查看Group结果 */
AggregationOutput output = coll.aggregate(match, group); // 执行 aggregation命令
Iterable<DBObject> results = output.results(); for (DBObject dbObject2 : results) {
System.out.println(dbObject2.toString());
} }

mongodb分组排序的更多相关文章

  1. mongodb group操作 以及管道 aggregate 分组排序分页

    分组获取数据: db.express_info.group({ "key":{"express_code":true}, "initial" ...

  2. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

  3. SQL语句分组排序,多表关联排序

    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

  4. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  5. oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  6. List对象分组排序算法

    场景: List里面的对象是订单的节点,比如我们快递的物流状态,这个是需要有序的,所以需要根据订单号进行分组排序. import java.util.ArrayList; import java.ut ...

  7. js分组排序算法, OrderBy

    由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2....  实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column ...

  8. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能

    MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...

  9. WPF 视图分组排序

    视图分组排序 效果: 实现步骤: 第一步:为分组做一个标题头,就是效果图中的浅蓝色部分: <DataGrid.GroupStyle>标签部分: <DataGrid x:Name=&q ...

随机推荐

  1. Java面试题 BAT 大公司面试题整理总结!

    本文只列出了问题,答案还是需要需要自己的总结,很多时候自己总结出来的语言在面试时比硬背的效果好很多. 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的 ...

  2. [转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项

    用户将桌面文件转移了,如: D:\Doc\Desktop  ,安装程序后,桌面不会生成快捷方式, 或者卸载后,开始菜单中的文件也不会被删除 NSIS卸载后无法删除开始菜单中的内容原因:因为NSIS中使 ...

  3. java学习--自定义类的实例的大小比较和排序

    我们知道Object类有一个equals方法,用于比较两个对象是否相等 我们只要在自定义类中重写了equals方法(若不重写就是比较两个实例的地址,相当于==)就可以用来比较该类的两个实例是否相等 问 ...

  4. STM32F401 外部中断误触发问题

    现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒. 原因:PA1配置成EXTI(上拉输入),经常被误触发 解决方式:将PA1配置成浮空输 ...

  5. 打开fiddler后无法访问网络问题

    https://jingyan.baidu.com/article/f54ae2fc680be81e92b849ed.html 导入证书后,还有一步易遗漏操作: 再次运行fiddler,依次点击Too ...

  6. ajax、json、jsonp

    这章分享下ajax.json.jsonp的学习记录,不得不说这真是些令人激动的技术. 推荐文章: https://segmentfault.com/a/1190000012469713 http:// ...

  7. 并发系列2:Java并发的基石,volatile关键字、synchronized关键字、乐观锁CAS操作

    由并发大师Doug Lea操刀的并发包Concurrent是并发编程的重要包,而并发包的基石又是volatile关键字.synchronized关键字.乐观锁CAS操作这些基础.因此了解他们的原理对我 ...

  8. mac book pro macOS10.13.3安装qt、qt creator C++开发环境,qt5.11.1,并解决cmake构建:qt mac this file is not part of any project the code

    因为之前在Ubuntu下使用的是qtcreator开发,现在想在mac上装一个系统,因为许久未装了,还是花了点时间,不如写个博客,下次就更快安装了.在Mac OS X下使用Qt开发,需要配置Qt库和编 ...

  9. SpringCloud-day06-Ribbon负载均衡

    6.3.Ribbon负载均衡 为了实现真正的负载均衡,我们需要集群3个服务提供给者,而在这之前我们只有一个服务提供者1001,那么我们新建模块microservice-station-provider ...

  10. Android 获取版本号名称工具类

    package com.example.grenaderose.redthunder.utils; import android.content.Context; import android.con ...