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());
        }
         
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM