1. 程式人生 > >mongoTemplate聚合操作

mongoTemplate聚合操作

準備資料 customer 集合,資料型別如下:(只是部分資料,資料量太多就不一一列出)

{ "_id" : ObjectId("594c78a1c5fea52a445b8cd2"), "probMac" : "141FBA789098", "devcMac" : "BC3AEA0E50CB", "inTime" : "20170612133513", "outTime" : "20170612133545", "rssi" : "14" }
{ "_id" : ObjectId("594c78a1c5fea52a445b8cd3"), "probMac" : "141FBA7890E8", "devcMac" : "38295A676DA3", "inTime" : "20170612133701", "outTime" : "20170612133716", "rssi" : "3" }
{ "_id" : ObjectId("594c78a1c5fea52a445b8cd4"), "probMac" : "141FBA789050", "devcMac" : "18D276C360FF", "inTime" : "20170612133746", "outTime" : "20170612133750", "rssi" : "8" }
{ "_id" : ObjectId("594c78a2c5fea52a445b8cd5"), "probMac" : "141FBA789050", "devcMac" : "E8BBA876D18A", "inTime" : "20170612134003", "outTime" : "20170612134012", "rssi" : "9" }
{ "_id" : ObjectId("594c78a2c5fea52a445b8cd6"), "probMac" : "141FBA789050", "devcMac" : "3CB6B75AFF3A", "inTime" : "20170612134133", "outTime" : "20170612134141", "rssi" : "11" }
{ "_id" : ObjectId("594c78a2c5fea52a445b8cd7"), "probMac" : "141FBA789050", "devcMac" : "D03742643B6D", "inTime" : "20170612134215", "outTime" : "20170612134247", "rssi" : "11" }
{ "_id" : ObjectId("594c78a2c5fea52a445b8cd8"), "probMac" : "141FBA789050", "devcMac" : "C09F054B6DB8", "inTime" : "20170612134217", "outTime" : "20170612134253", "rssi" : "27" }


1 通過mongoTemplate.group方法

public <T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass) 

public <T> GroupByResults<T> group(Criteria criteria, String inputCollectionName, GroupBy groupBy,
Class<T> entityClass)

一種可以帶過濾條件一種全集合分組查詢

使用第一種不帶條件的查詢

	@RequestMapping("/test")
	@ResponseBody
	public Object test(){
		//多個key組合分組,一個key分組摻入一個引數即可
				GroupBy groupBy = GroupBy.key("devcMac","probMac").initialDocument("{total:0}")  
		        .reduceFunction("function(doc, prev){prev.total+=1}");  
		        GroupByResults<BasicDBObject> gbr = mongoTemplate.group("customer", groupBy, BasicDBObject.class); 
		return gbr.iterator();
	}

返回結果:

[{"devcMac":"BC3AEA0E50CB","probMac":"141FBA789098","total":8.0},
{"devcMac":"38295A676DA3","probMac":"141FBA7890E8","total":1.0},
{"devcMac":"18D276C360FF","probMac":"141FBA789050","total":1.0},
{"devcMac":"E8BBA876D18A","probMac":"141FBA789050","total":2.0},
{"devcMac":"3CB6B75AFF3A","probMac":"141FBA789050","total":6.0},
{"devcMac":"D03742643B6D","probMac":"141FBA789050","total":1.0}]

如果想返回其他的欄位可以更改reduce函式,和 initialDocument 引數

比如加上inTime值的陣列內容

@RequestMapping("/groupByMutiKeyOther")
	@ResponseBody
	public Object groupByMutiKeyOther(String... key) {
		// 多個key組合分組,一個key分組摻入一個引數即可
		GroupBy groupBy = GroupBy.key("probMac","devcMac").initialDocument("{inTime:[],count:0}")
				.reduceFunction("function(doc, prev){"
						+ "prev.inTime.push(doc.inTime);"
						+ "prev.count+=1}");
		GroupByResults<BasicDBObject> gbr = mongoTemplate.group("customer",
				groupBy, BasicDBObject.class);
		return gbr.iterator();
	}

返回結果:
[{"probMac":"141FBA789098","devcMac":"BC3AEA0E50CB","inTime":["20170612133513","20170612172022","20170612185417",
"20170613021023","20170628034820","20170628054026","20170628102731","20170628142909"],"count":8.0},
{"probMac":"141FBA7890E8","devcMac":"38295A676DA3","inTime":["20170612133701"],"count":1.0},
{"probMac":"141FBA789050","devcMac":"18D276C360FF","inTime":["20170612133746"],"count":1.0},
{"probMac":"141FBA789050","devcMac":"E8BBA876D18A","inTime":["20170612134003","20170617151506"],"count":2.0},
{"probMac":"141FBA789050","devcMac":"3CB6B75AFF3A","inTime":["20170612134133","20170616215301","20170619002323",
"20170625061702","20170625200712","20170627235117"],"count":6.0},
{"probMac":"141FBA789050","devcMac":"D03742643B6D","inTime":["20170612134215"],"count":1.0}]

2 mapreduce分組統計
	@RequestMapping("/groupByMapReduce")
	@ResponseBody
	public Object groupByMapReduce(String key) {
	    String map = "function() { emit(this.probMac, {count:1});}";
	    String reduce = "function(key, values) {"
	    		+ "var total = 0;"
	    		+ "for(var i=0;i<values.length;i++){total += values[i].count;}"
	    		+ "return {count:total};}";
	    
	    MapReduceResults<BasicDBObject> mrr = mongoTemplate.mapReduce("customer", map, reduce, BasicDBObject.class);
		return mrr.iterator();
	}

返回結果內容:
[{"_id":"141FBA789010","value":{"count":505.0}},{"_id":"141FBA789050","value":{"count":18287.0}},{"_id":"141FBA789098","value":{"count":7489.0}},{"_id":"141FBA7890E8","value":{"count":8626.0}}]


3 通過 mongoTemplate.aggregate方法

	@RequestMapping("/groupByAggregation")
	@ResponseBody
	public Object groupByAggregation(String key) {
		AggregationResults<BasicDBObject> a = mongoTemplate.aggregate(
				Aggregation.newAggregation(
						Aggregation.group("probMac").count().as("count")), Customer.class, BasicDBObject.class);
		return a.iterator();
	}
	

返回結果:
[{"_id":"141FBA789010","count":505},{"_id":"141FBA789050","count":18291},{"_id":"141FBA7890E8","count":8644},{"_id":"141FBA789098","count":7493}]




相關推薦

MongoTemplate聚合操作MongoDB

 Aggregation簡單來說,就是提供資料統計、分析、分類的方法,這與mapreduce有異曲同工之處,只不過mongodb做了更多的封裝與優化,讓資料操作更加便捷和易用。Aggregation操作,接收指定collection的資料集,通過計算後返回result資料;一個aggreg

mongoTemplate聚合操作

準備資料 customer 集合,資料型別如下:(只是部分資料,資料量太多就不一一列出) { "_id" : ObjectId("594c78a1c5fea52a445b8cd2"), "probMac" : "141FBA789098", "devcMac" : "BC

OpenStack/Gnocchi簡介——時間序列數據聚合操作提前計算並存儲起來,先算後取的理念

完整 其它 度量標準 過濾 無法 什麽 規劃 med 表示 先看下 http://www.cnblogs.com/bonelee/p/6236962.html 這裏對於環形數據庫的介紹,便於理解歸檔這個操作! 轉自:http://blog.sina.com.cn/s/blo

elasticsearch聚合操作——本質就是針對搜索後的結果使用桶bucket(允許嵌套)進行group by,統計下分組結果,包括min/max/avg

per 找到 只需要 語句 所有 smi 即使 log 以及 分析 Elasticsearch有一個功能叫做聚合(aggregations),它允許你在數據上生成復雜的分析統計。它很像SQL中的GROUP BY但是功能更強大。 舉個例子,讓我們找到所有職員中最大的共同點(興

elastic search6聚合操作keyword

在mapping index為true的情況下,該欄位會預設對內容進行分詞若進行agg操作則會出現下面情況: 命令: GET /data/http_record/_search { "aggs": { "ua": { "terms": { "field"

Elasticsearch如何實現篩選功能(設定欄位不分詞和聚合操作

0 起因 中文分詞中比較常用的分詞器是es-ik,建立索引的方式如下: 這裡我們為index personList新建了兩個欄位:name和district,注意索引名稱必須是小寫 (以下格式都是在kibana上做的) PUT /person_list { "mappings

04 -pandas索引的堆(行列操作,交換行列)、聚合操作(求和、最大值、最小值、平均值等)

引入模組 import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt 建立示例DataFrame # 用作案例 不要刪 !!! data=np.random.ra

02 ndarray的屬性 、ndarray的基本操作(索引、切片、變形、連線、切分、副本)、聚合操作、矩陣操作、排序、Panda資料結構、Series建立、索引與切片、屬性與方法、運算

二、ndarray的屬性 4個必記引數: ndim:維度 shape:形狀(各維度的長度) size:總長度 dtype:元素型別 import matplotlib.pyplot as plt ndarr = plt.imread("./jin.png") plt.

Python中的Numpy(3.聚合操作)

1.ndarray的常用的聚合操作 # 1.最大值/最小值 :np.max / np.min n1 = np.random.randint(0,100,20) print(n1) # 打印出n1中的最大值和最小值 n1_max = n1.max() n1_min = n1.min() print

MongoDB聚合操作例項(基於SpringBoot 整合MongoDB)

轉載務必說明出處:https://blog.csdn.net/LiaoHongHB/article/details/83579030        spring boot整合mongdb,其中的mongodbTemplate只有一些簡單的方法對mongod

MongoDB的聚合操作以及與Python的互動

MongoDB聚合 什麼是聚合 MongoDB中聚合(aggregate)主要用於處理資料(諸如統計平均值,求和等),並返回計算後的資料結果。 聚合是基於資料處理的聚合管道,每個文件通過由多個階段組成的管道,可以對每個階段的管道進行分組、過濾等功能,然後經過一系列處理,輸出結果。 語法:db.集合名稱

MongoTemplate基本操作

正文 回到頂部 新增mongo依賴 org.springframework.boot spring-boot-starter-data-mongodb 回到頂部 配置連線 有密碼 spring.data.mongodb.uri=mongodb://name

MongoDB 基本操作聚合操作

一 . MongoDB 基本操作  基本操作可以簡單分為查詢、插入、更新、刪除。 1 文件查詢 作用 MySQL SQL  MongoDB  所有記錄  SELECT * FROM users;  db.users.find();  age =18  SELECT * FROM users WH

二十三、mongodb聚合操作

1、mongodb的聚合是什麼 聚合(aggregate)是基於資料處理的聚合管道,每個文件通過一個由多個階段(stage)組成的管道,可以對每個階段的管道進行分組、過濾等功能,然後經過一系列的處理,輸出相應的結果。 db.集合名稱.aggregate({管道:{表示式}})

es進行聚合操作時提示Fielddata is disabled on text fields by default

根據es官網的文件執行 GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } 這個例子時

php7中使用mongoDB的聚合操作對資料進行分組求和統計操作

本文將介紹mongoDB使用aggregate對資料分組,求和。給出shell命令列寫法,php7中的寫法,也將給出相同資料結構mysql命令列寫法。 mongoDB collection a_test 中資料: > db.a_test.f

使用mongoDB pipeline進行聚合操作

mongoDB中的聚合操作將多個文件中的值組合在一起,並可對分組資料執行各種操作,以返回單個結果。 在SQL中的 count(*)與group by組合相當於mongodb 中的聚合功能。 mongoDB為我們提供了三種方法來實現聚合操作。分別是aggrega

MongoDB 聚合操作 與python互動

聚合操作 對文件的資訊進行整理統計的操作 返回:統計後的文件集合 db.collection.aggregate() 功能:聚合函式,完成聚合操作 引數:聚合條件,配合聚合操作符使用 返回:聚合後的結果 聚合操作符 $group  分組聚合   要配合具體的統計操作

mongodb aggregate 聚合操作

何為aggregate聚合操作? mongodb的聚合操作,接受一個名為pipeline的引數和一個可選引數。 pipeline可以理解為流水線,一條流水線上可以有一個或多個工序。所以,mongodb的一次聚合操作就是對一個表進行多個工序的加工,其中的每個工

Spark部分聚合操作的API總結

本文主要簡單的講講Spark幾個常用的聚合操作的API的使用和之間的一些區別。 建立一個JavaRDD和一個JavaPairRDD reduce 執行結果 reduceByKey