1. 程式人生 > >Java中使用mongodb的aggregate聚合查詢

Java中使用mongodb的aggregate聚合查詢

首先,我們在資料庫中,mongodb的聚合查詢是這樣寫。

db.getCollection('parking_record').aggregate(
        {$match : {"appId" : "2e1800b22ae70600", "leaveTime" : {"$gt" : ISODate("2017-07-12T00:00:00"), "$lt" : ISODate("2017-07-13T00:00:00")}}},
        {$group : {"_id" : "$leaveMethod", "count" : {$sum : 1}}},
        {$sort : {"_id" : 1}}
    )

在java類中,應該怎樣呢?這是我寫的其中一個方法。

(首先要匯入mongodb的java驅動包mongo-java-driver-3.2.2.jar)

/**
	 * 根據日期統計離場方式
	 * @param app_id 外掛ID
	 * @param beginDate 開始日期
	 * @param endDate 結束日期
	 * @return {"ManualLeave":2,"AutoLeave":4}
	 * @throws Exception
	 */
	public String aggregateLeaveMethodByDate(String app_id, Date beginDate, Date endDate) throws Exception {
		MongoCollection<Document> collection = PluginMongo.instance().getDatabase().getCollection(MongoCollectionName.PARKING_RECORD);
		Document sub_match = new Document();
		sub_match.put("appId", app_id);
		sub_match.put("leaveTime", new Document("$gt", beginDate).append("$lt", endDate));
		
		Document sub_group = new Document();
		sub_group.put("_id", "$leaveMethod");
		sub_group.put("count", new Document("$sum", 1));
		
		Document match = new Document("$match", sub_match);
		Document group = new Document("$group", sub_group);
		Document sort = new Document("$sort", new Document("_id", 1));
		
		List<Document> aggregateList = new ArrayList<Document>();
		aggregateList.add(match);
		aggregateList.add(group);
		aggregateList.add(sort);
		
		JSONObject ret_obj = new JSONObject();
		AggregateIterable<Document> resultset = collection.aggregate(aggregateList);
		MongoCursor<Document> cursor = resultset.iterator();
		
		try {
			while(cursor.hasNext()) {
				Document item_doc = cursor.next();
				int leaveMethod = item_doc.getInteger("_id", 0);
				int count = item_doc.getInteger("count", 0);
				
				LeaveMethodEnum leaveMethodVal = LeaveMethodEnum.fromType(leaveMethod);
				ret_obj.put(leaveMethodVal.name(), count);
			}
		} finally {
			cursor.close();
		}
		
		return ret_obj.toJSONString();
	}
上面的只有matche,group等幾個常用,project,limit等類似,可以參考上面的。

aggregate的相關sql知識可以參考菜鳥教程:http://www.runoob.com/mongodb/mongodb-aggregate.html

相關推薦

ElasticSearch學習(十一)在Java應用實現聚合查詢、query string查詢

//聚合查詢 @Test public void test20() throws Exception { //指定ES叢集 Settings settings = Settings.builder().put("clus

網絡編程-Java的Internet查詢

平臺 route 存在 最大 基礎概念 net 過度 ipv 十六 前提 在深入理解URL、URI等概念,或者學些Socket相關的知識之,有必要系統理解一下Internet相關的一些基礎知識。 Internet地址 連接到Internet(因特網)的設備稱為節點(node

資料結構----Java陣列的查詢

線性查詢:時間複雜度O(n);適合於儲存結構為順序儲存或連結儲存的線性表。 原理:順序查詢也稱為線形查詢,屬於無序查詢演算法。從資料結構線形表的一端開始,順序掃描,依次將掃描到的結點關鍵字與給定值k相

mongodb在java常見的查詢(一)

mongodb是非關係型資料庫,對於資料的操作跟關係型資料庫有很大的區別,非通用sql, 那麼在java中是如何進行資料讀取呢?詳情如下: (聚合函式部分見下期<mongodb在java中常見的查詢(二)>) ps: mongodb不適合做業務系統,,只適合做

JAVA * 二分法查詢陣列的數值下標

/* * 二分法查詢陣列中的數值下標 */import java.util.Scanner;public class TwopointSearch {public static void main(String [] args){int []arr={1,3,4,5,2,6,

如果將Java從資料庫查詢到的結果集轉換為Json陣列形式

package util; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.Date; import net.sf.json.JSONArray; import n

Java什麼集合查詢最快

上一篇文章中,我們瞭解了ArrayList的的遍歷速度比LinkedList快7000多倍。下面我們看一下什麼結合中查詢物件最快。呵呵程式碼如下:package dbtransfer;import java.util.A

Java常用的查詢演算法——順序查詢和二分查詢

import java.util.Scanner; /* * 順序查詢 */ public class SequelSearch { public static void main(String[] arg) { int[] a={4,6,2,8,1,9,0,3}; Scann

javamongodb常用的aggregate聚合查詢操作

      最近因為專案需要,用到了MongoDB,之前只用過關係型資料庫,第一次專案中用到,有一點點心得和收穫,記錄一下。 MongoDB 是一種文件型數s庫,裡面分為資料庫(DBs)和集合(Collections),分別相當於SQL的資料庫和

Java使用mongodb的aggregate聚合查詢

首先,我們在資料庫中,mongodb的聚合查詢是這樣寫。 db.getCollection('parking_record').aggregate( {$match : {"appI

在SPRING DATA MONGODB使用聚合統計查詢Java

public class VideoRepositoryImpl implements VideoRepositoryCustom{          private static Logger logger = LoggerFactory.getLogger(VideoRepositoryImpl.cla

django 聚合函數,分組函數,F 查詢, Q查詢

value 什麽 and clas 計算 gre score with pre 先以mysql的語句,聚合用在分組裏, 對mysql中groupby 是分組 每什麽的時候就要分組,如 每個小組,就按小組分, group by 字段 having 聚合函數 #舉例 :求班裏

如何在java List進行模糊查詢

ring 模糊匹配 set return 模糊查詢 匹配 emp res show 比如我有下面這樣一個List,裏面存放的是多個Employee對象。然後我想對這個List進行按照Employee對象的名字進行模糊查詢。有什麽好的解決方案麽?比如我輸入的查詢條件為“wan

javamongo的條件查詢

urn list findall template operation and else clas 記錄 @Override public Page<ProductInfo> findAll(Pageable pageable, ProductInfo

Java使用Set進行並集,差集,交集查詢

利用Java中使用Set進行並集,差集,交集查詢 首先命名一個類名為DealSet存放查詢並集,差集,交集的方法 DealSet.java package SetLearning; import java.util.HashSet; import java.util.Set; p

java專案】mybatis的mapper查詢時返回其他實體(多用於多表查詢

<select id="selectUserorder" resultType="com.pojo.Orderdetail" parameterType="java.lang.Integer"> SELECT a.o_status, a.o_no, a.uid,

Java陣列的補充方法(增強版遍歷、逆序、氣泡排序、二分法查詢

陣列的補充方法 在《陣列》文章中簡單的介紹了陣列的基本格式和實現案例,此處不做說明,此文主要是補充一些陣列的使用方法。例如:增強版的遍歷、逆序、氣泡排序、二分法查詢。 增強版遍歷: 1.與普通遍歷的區別: 普通的遍歷給人的直觀感覺不是很好,輸出的元素都是排列不好看,所以需

Java雙鏈表的查詢、插入、刪除等

雙向連結串列結構和單向連結串列的區別:最後一個結點的連結地址上,單向連結串列是null,而雙向連結串列是表頭的連結地址。 即雙向連結串列的head和last互相指向 示意圖 表頭為空        head之前的節點是

Java陣列氣泡排序、選擇排序、二分查詢的詳細分析

前言:儘管在實際開發中,我們通過Arrays工具類就可以便利地對陣列進行排序和查詢的操作,但是掌握氣泡排序、選擇排序、二分法查詢的思想對於程式設計來說還是極其重要的,在很多場景都會用到。希望通過這篇部落格的分析能給大家帶來收穫。 主題:陣列的排序和查詢 1、冒泡法排序:

Java查詢子串出現次數

方法一:採用String類中indexOf()方法;public class SubStringCount {   public static void main(String[] args) {     String str1 = "abcjavanbajavasrcjavammmjava";