@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. mysql 定时计划任务 wish 按照id分组定时循环启动

    SELECT count(*) FROM wish_sellers_in;UPDATE  wish_sellers_in  SET act_status =0 WHERE  id >=1 AND ...

  2. 1.Sed | Awk | Grep | Find

    1.Sed | Awk | Grep | Find 可以参考的文档链接 CentOS7 查看 当前机器 已经启动的端口的Shell命令: netstat -lntup | awk -F' ' {'pr ...

  3. virtualbox下centos虚拟机安装,并网卡配置桥接方式上网,使得和host可以互Ping通。

    见:http://www.cnblogs.com/taoshiqian/p/7615993.html 注意: 1.host 主机什么都不要处理 2.将virtualbox 的对应虚拟机网络设置桥接 3 ...

  4. MVC过滤器使用方法

    先介绍下什么是过滤器:ASP.NET MVC中的灭一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理,这时就用到了过滤器. MVC支持的过滤器有 ...

  5. python+Django+test 测试数据库生成报错

    前提: 使用Django自带的test进行单元测试. 问题描述: 运行:python manage.py test,报错,出现数据库乱码的现象,报错如下: Creating test database ...

  6. chrome开发者工具实现整站截屏

    我们经常要遇到将整个网站作为图片保存下来的情况,而windows系统自带的PrintScreen键只能保存当前屏幕的截图 在chrome浏览器中可以安装第三方的截图插件实现整站截图 今天我们要介绍的方 ...

  7. event 事件1

    1.事件流 1.1 事件冒泡 IE8- 浏览器支持的事件流是事件冒泡.事件冒泡是事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)的过程. <!doctype html&g ...

  8. Java框架spring 学习笔记(十二):aop实例操作

    使用aop需要在网上下载两个jar包: aopalliance.jar aspectjweaver.jar 为idea添加jar包,快捷键ctrl+shift+alt+s,打开添加jar包的对话框,将 ...

  9. Java框架spring 学习笔记(四):BeanPostProcessor接口

    如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化前后后添加一些自己的逻辑处理. 编写InitHelloWorld.java package com.example.spring; ...

  10. 【spring】使用spring过程中踩到的坑

    这里简单记录一下,学习spring的时候碰过的异常: 异常:org.springframework.beans.factory.BeanDefinitionStoreException: Unexpe ...