zoukankan      html  css  js  c++  java
  • mongodb分组排序

    	@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());
            }
             
            }
  • 相关阅读:
    How Many Answers Are Wrong(带权并查集)
    Dice
    Plants vs. Zombies(二分好题+思维)
    Marriage Match IV(最短路+网络流)
    Treasure Hunt
    The Doors(几何+最短路,好题)
    90. Subsets II
    89. Gray Code
    88. Merge Sorted Array
    87. Scramble String
  • 原文地址:https://www.cnblogs.com/hukeshare/p/9870581.html
Copyright © 2011-2022 走看看