最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mongoDB中聚合函數(shù)java處理示例詳解

 更新時(shí)間:2019年04月16日 10:11:19   作者:VV不想說(shuō)話(huà)  
這篇文章主要給大家介紹了關(guān)于mongoDB中聚合函數(shù)java處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.問(wèn)題

最近在做項(xiàng)目的時(shí)候碰到一個(gè)對(duì)mongoDB的數(shù)據(jù)處理,從MongoDB中拿到內(nèi)嵌文檔的時(shí)間排序的list。

一開(kāi)始考慮到直接對(duì)mongoDB中的屬性排序,后面發(fā)現(xiàn)屬性存在內(nèi)嵌文檔中,所以處理中需要用到聚合函數(shù)。

思考

(key)解決這個(gè)問(wèn)題的過(guò)程讓我學(xué)到很多,發(fā)現(xiàn)自己在解決一個(gè)問(wèn)題不僅查找問(wèn)題的姿勢(shì)不對(duì),浪費(fèi)太多時(shí)間。而且在碰到問(wèn)題之后,應(yīng)該多看看解決辦法,甚至解決了之后要去思考問(wèn)題,回顧問(wèn)題。而不是像以前一樣,解決問(wèn)題了就萬(wàn)事大吉,拋之腦后。

2.解決

需要對(duì)document中的一個(gè)tweet_list 集合中的一個(gè)屬性 timestamp_ms進(jìn)行排序。 組內(nèi)排序

使用聚合框架,通過(guò)match,unwind,sort等不同的組件創(chuàng)建一個(gè)管道。

類(lèi)似mysql中的多層嵌套子查詢(xún)。

mongoDB中js代碼

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實(shí)現(xiàn)此聚合函數(shù)

java中的Aggregation類(lèi),查詢(xún)條件的順序決定結(jié)果。

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()); //獲取到的結(jié)果是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.擴(kuò)展

管道pipeline

以下的管道操作符可以按照任意順序組合在一起使用。每個(gè)操作符都會(huì)接受一連串文檔,對(duì)這些文檔做了類(lèi)型轉(zhuǎn)換后,將轉(zhuǎn)換后的文檔作為結(jié)果傳遞給下一個(gè)操作符。直到最后一個(gè)管道操作符,將結(jié)果返回給客戶(hù)端。

篩選match

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

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

2.如果在project和group之前執(zhí)行match,查詢(xún)可以用索引。

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

投射project

類(lèi)似select操作??梢杂霉艿辣磉_(dá)式,數(shù)學(xué)表達(dá)式,日期表達(dá)式,字符表達(dá)式,邏輯表達(dá)式等。

分組group

跟mysql中的分組比較像

排序sort

1 升序 -1 降序

限制limit

限制結(jié)果條數(shù)

跳過(guò)skip

丟棄結(jié)果中的前n個(gè)文檔

拆分unwind

把數(shù)組中的每個(gè)值拆分為單獨(dú)的文檔,例如此問(wèn)題中需要對(duì)一個(gè)document中的tweetlist進(jìn)行排序,可以使用unwind把tweetlist中的不同map拆分成不同的文檔。

結(jié)果返回

文檔

MapReduce

如果聚合框架中查詢(xún)語(yǔ)言不能不表達(dá),需要用到MapReduce。

使用:把問(wèn)題拆分為多個(gè)小問(wèn)題,把各個(gè)小問(wèn)題發(fā)送到不同的機(jī)器上,每臺(tái)機(jī)器只負(fù)責(zé)完成一部分的工作,完成之后,再把零碎的解決方案合并。

步驟:

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

2.洗牌shuffle:按照鍵值分組,并將產(chǎn)生的鍵值組成列表放到對(duì)應(yīng)的鍵中。

3.化簡(jiǎn)reduce:把列表中的值化簡(jiǎn)成一個(gè)單值,值被返回,繼續(xù)shuffle,然后最終每個(gè)鍵的列表只有一個(gè)值,即最終結(jié)果,

應(yīng)用:

1.找到集合中所有鍵

2.網(wǎng)頁(yè)分類(lèi)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • MongoDB分片鍵的選擇和案例實(shí)例詳解

    MongoDB分片鍵的選擇和案例實(shí)例詳解

    分片集群中良好的查詢(xún)性能都依賴(lài)于正確選擇分片鍵。下面這篇文章主要給大家介紹了關(guān)于MongoDB分片鍵的選擇和案例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 使用zabbix監(jiān)控mongodb的方法

    使用zabbix監(jiān)控mongodb的方法

    MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。通過(guò)本文給大家介紹使用zabbix監(jiān)控mongodb的方法,需要的朋友參考下
    2016-02-02
  • mongodb使用c#驅(qū)動(dòng)數(shù)據(jù)插入demo

    mongodb使用c#驅(qū)動(dòng)數(shù)據(jù)插入demo

    今天小編就為大家分享一篇關(guān)于mongodb使用c#驅(qū)動(dòng)數(shù)據(jù)插入demo,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶(hù))

    MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶(hù))

    這篇文章主要介紹了MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶(hù))的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • MongoDB數(shù)據(jù)庫(kù)常用28條查詢(xún)語(yǔ)句總結(jié)

    MongoDB數(shù)據(jù)庫(kù)常用28條查詢(xún)語(yǔ)句總結(jié)

    我們經(jīng)常使用的MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)的發(fā)展關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不滿(mǎn)足于互聯(lián)網(wǎng)的需求,因此出現(xiàn)了非關(guān)系數(shù)據(jù)庫(kù),下面這篇文章主要給大家總結(jié)介紹了關(guān)于MongoDB數(shù)據(jù)庫(kù)常用28條查詢(xún)語(yǔ)句,需要的朋友可以參考下
    2023-05-05
  • MongoDB的chunk詳解

    MongoDB的chunk詳解

    這篇文章主要介紹了MongoDB的chunk的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-04-04
  • mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)

    mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)

    對(duì)于文檔的更新除替換外,針對(duì)某個(gè)或多個(gè)文檔只需要部分更新可使用原子的更新修改器,能夠高效的進(jìn)行文檔更新。更新修改器是中特殊的鍵
    2017-04-04
  • mongodb 3.2.5安裝詳細(xì)過(guò)程

    mongodb 3.2.5安裝詳細(xì)過(guò)程

    這篇文章主要介紹了mongodb 3.2.5安裝過(guò)程詳細(xì)記錄,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • MongoDB條件操作符的具體使用

    MongoDB條件操作符的具體使用

    MongoDB的條件操作符主要分為比較操作符、邏輯操作符、元素操作符、數(shù)組操作符、文本搜索操作符等幾種類(lèi)型,本文就詳細(xì)的介紹一下這幾種類(lèi)型的操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • MongoDB 數(shù)據(jù)庫(kù)的命名、設(shè)計(jì)規(guī)范詳解

    MongoDB 數(shù)據(jù)庫(kù)的命名、設(shè)計(jì)規(guī)范詳解

    隨著MongoDB的普及和使用量的快速增長(zhǎng),為了規(guī)范使用,便于管理和獲取更高的性能,整理此文檔
    2020-02-02

最新評(píng)論

繁昌县| 沾益县| 南木林县| 文山县| 赣榆县| 抚州市| 盐边县| 旬邑县| 和林格尔县| 永宁县| 卓资县| 南平市| 安溪县| 新巴尔虎左旗| 泰和县| 浦东新区| 临沭县| 即墨市| 万安县| 浮山县| 琼结县| 米易县| 明水县| 桃园县| 保亭| 正定县| 疏附县| 阳春市| 安图县| 吉木萨尔县| 凤阳县| 五峰| 金乡县| 白山市| 都江堰市| 商河县| 三原县| 临汾市| 衡山县| 子洲县| 平原县|