一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - mongoDB中聚合函數java處理示例詳解

mongoDB中聚合函數java處理示例詳解

2020-05-22 17:54VV不想說話 MongoDB

這篇文章主要給大家介紹了關于mongoDB中聚合函數java處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mongoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

1.問題

最近在做項目的時候碰到一個對mongoDB的數據處理,從MongoDB中拿到內嵌文檔的時間排序的list。

一開始考慮到直接對mongoDB中的屬性排序,后面發現屬性存在內嵌文檔中,所以處理中需要用到聚合函數。

思考

(key)解決這個問題的過程讓我學到很多,發現自己在解決一個問題不僅查找問題的姿勢不對,浪費太多時間。而且在碰到問題之后,應該多看看解決辦法,甚至解決了之后要去思考問題,回顧問題。而不是像以前一樣,解決問題了就萬事大吉,拋之腦后。

2.解決

需要對document中的一個tweet_list 集合中的一個屬性 timestamp_ms進行排序。 組內排序

使用聚合框架,通過match,unwind,sort等不同的組件創建一個管道。

類似mysql中的多層嵌套子查詢。

mongoDB中js代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
db.text.aggregate(
 // Initial document match (uses index, if a suitable one is available)
 [
 { $match: {
  _id : ObjectId("5ca95b4bfb60ec43b5dd0db5")
 }},
 
 // Expand the scores array into a stream of documents
 { $unwind: '$tweet_list' },
  
  { $match: {
   'tweet_list.timestamp_ms': '1451841845660'
  }},
 
 // Sort in descending order
 { $sort: {
  'tweet_list.timestamp_ms': 1
 }}
 ]
)

java實現此聚合函數

java中的Aggregation類,查詢條件的順序決定結果。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Aggregation agg = Aggregation.newAggregation(
  Aggregation.match(Criteria.where("_id").is(id)),
  Aggregation.unwind("tweet_list"),
  Aggregation.sort(Sort.Direction.ASC,"tweet_list.timestamp_ms"),
  Aggregation.project("tweet_list.timestamp_ms","tweet_list.text","tweet_list.created_at")
 
);
AggregationResults<JSONObject> results = mongoTemplate.aggregate(agg, "text", JSONObject.class);
//System.out.println("results"+results.getRawResults()); //獲取到的結果是document
//String res = results.getRawResults();
String json = com.mongodb.util.JSON.serialize(results.getRawResults());
System.out.println("JSON serialized Document: " + json);
JSONObject jso= JSON.parseObject(json);
JSONArray resultss=jso.getJSONArray("results");
System.out.println(resultss);

3.擴展

管道pipeline

以下的管道操作符可以按照任意順序組合在一起使用。每個操作符都會接受一連串文檔,對這些文檔做了類型轉換后,將轉換后的文檔作為結果傳遞給下一個操作符。直到最后一個管道操作符,將結果返回給客戶端。

篩選match

盡可能將帥選放在管道的前部。兩個原因:

1.先過濾掉不需要的文檔,減少管道的工作量。

2.如果在project和group之前執行match,查詢可以用索引。

3.不能在match中使用地理空間操作符

投射project

類似select操作。可以用管道表達式,數學表達式,日期表達式,字符表達式,邏輯表達式等。

分組group

跟mysql中的分組比較像

排序sort

1 升序 -1 降序

限制limit

限制結果條數

跳過skip

丟棄結果中的前n個文檔

拆分unwind

把數組中的每個值拆分為單獨的文檔,例如此問題中需要對一個document中的tweetlist進行排序,可以使用unwind把tweetlist中的不同map拆分成不同的文檔。

結果返回

文檔

mongoDB中聚合函數java處理示例詳解

MapReduce

如果聚合框架中查詢語言不能不表達,需要用到MapReduce。

使用:把問題拆分為多個小問題,把各個小問題發送到不同的機器上,每臺機器只負責完成一部分的工作,完成之后,再把零碎的解決方案合并。

步驟:

1.映射map:把操作映射到集合中每個文檔

2.洗牌shuffle:按照鍵值分組,并將產生的鍵值組成列表放到對應的鍵中。

3.化簡reduce:把列表中的值化簡成一個單值,值被返回,繼續shuffle,然后最終每個鍵的列表只有一個值,即最終結果,

應用:

1.找到集合中所有鍵

2.網頁分類

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://juejin.im/post/5cb31cf0e51d456e2c2484fb

延伸 · 閱讀

精彩推薦
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
主站蜘蛛池模板: 茄子视频懂你更多apl | 四虎影视在线永久免费观看 | 国产a一级毛片午夜剧院 | 婷婷色网| 成功精品影院 | 俺去啦最新地址 | 麻豆在线观看 | 欧美日韩亚洲区久久综合 | 国产成人精品第一区二区 | 精品精品国产自在久久高清 | 日本另类z0zx高清 | 国产大秀视频一区二区三区 | 丝袜兔女郎被啪在线观看91 | 亚洲国内精品久久 | 天天草天天 | 91极品在线观看 | 国产成+人+综合+亚洲欧美丁香花 | 九九免费精品视频 | 午夜福利体验免费体验区 | 日韩精品免费一区二区 | 按摩院已婚妇女中文字幕 | 午夜私人影院在线观看 | 色橹| 好大好硬抽搐好爽想要 | 91久久青青草原线免费 | 国产精品女主播自在线拍 | 色呦呦tv | 日本在线看免费 | 天堂欧美 | 国产精品亚洲精品观看不卡 | 91精品国产麻豆国产自产在线 | 日本三级免费网站 | 午夜国产福利视频一区 | 日本人和黑人一级纶理片 | 成年人视频在线免费观看 | 99ri国产精品 | 午夜剧场1000 | 天天亚洲综合 | 男女污网站 | 桃乃木香奈ipx在线播放 | 亚洲免费视频在线 |