MongoDB中aggregate()方法實(shí)例詳解
前言
MongoDB的一個(gè)很大的好處是能夠使用MapReduce來(lái)吧數(shù)據(jù)庫(kù)查詢(xún)的結(jié)果簡(jiǎn)化成一個(gè)與原來(lái)的集合完全不同的結(jié)構(gòu)。MapReduce把一個(gè)數(shù)據(jù)庫(kù)查詢(xún)的值映射為一個(gè)完全不同的形式,然后簡(jiǎn)化結(jié)果,使它們的可用性更好。
MongoDB有一個(gè)MapReduce框架,它也允許你使用聚合來(lái)簡(jiǎn)化吧一個(gè)MapReduce操作傳輸?shù)搅硪粋€(gè)MapReduce操作的一系列過(guò)程。有了MapReduce和聚合,可以用數(shù)據(jù)生成一些不平凡的業(yè)績(jī)。聚合的概念是指,在把MongoDB服務(wù)器上的文檔匯編為一個(gè)結(jié)果集時(shí),對(duì)它們執(zhí)行一些列的操作。這比在Node.js應(yīng)用程序中檢索它們和處理它們更高效,因?yàn)镸ongoDB的服務(wù)器可以在本地操作數(shù)據(jù)塊。
1,了解aggergate()方法
Collection對(duì)象提供了aggregate()方法來(lái)對(duì)數(shù)據(jù)進(jìn)行聚合操作。aggregate()方法的語(yǔ)法如下
aggregate(operators,[options],callback)
operators參數(shù)是如表1所示的聚合運(yùn)算符的數(shù)組,它允許你定義對(duì)數(shù)據(jù)執(zhí)行什么匯總操作。options參數(shù)允許你設(shè)置readPreference屬性,它定義了從哪里讀取數(shù)據(jù)。callback參數(shù)是接受err和res
運(yùn)算符 | 說(shuō)明 |
$project | 通過(guò)重命名,添加或刪除字段重塑文檔。你也可以重新計(jì)算值,并添加子文檔。例如,下面的例子包括title并排除name: {$project:{title:1,name:0}} 以下是把name重命名為title的例子: {$project{title:"$name"}} 下面是添加一個(gè)新的total字段,并用price和tax字段計(jì)算它的值的例子: {$project{total:{$add:["$price","$tax"]}}} |
$match | 通過(guò)使用query對(duì)象運(yùn)算符來(lái)過(guò)濾文檔集。 |
$limit | 限定可以傳遞到聚合操作的下一個(gè)管道中的文檔數(shù)量。例如{$limit:5} |
$skip | 指定處理聚合操作的下一個(gè)管道前跳過(guò)的一些文檔 |
$unwind | 指定一個(gè)數(shù)組字段用于分割,對(duì)每個(gè)值創(chuàng)建一個(gè)單獨(dú)的文檔。例如{$unwind:"$myArr"} |
$group | 把文檔分成一組新的文檔用于在管道中的下一級(jí)。新對(duì)象的字段必須在$group對(duì)象中定義。你還可以把表2中列出的分組表 達(dá)式運(yùn)算符應(yīng)用到該組的多個(gè)文檔中。例如,使用下面的語(yǔ)句匯總value字段:{$group:{set_id:"$0_id",total:{$sum:"$value"}}} |
$sort | 在把文檔傳遞給處理聚合操作的下一個(gè)管道前對(duì)它們排序。排序指定一個(gè)帶有field:<sort_order>屬性的對(duì)象,其中<sort_order> 為1表示升序,而-1表示降序 |
2,實(shí)現(xiàn)聚合表達(dá)式運(yùn)算符
當(dāng)你實(shí)現(xiàn)聚合運(yùn)算符時(shí),你建立將傳遞到聚合操作流水線(xiàn)的下一級(jí)的新文檔。MongoDB的聚合框架提供了許多表達(dá)式運(yùn)算符,它們有助于對(duì)新字段計(jì)算值或?qū)ξ臋n中的現(xiàn)有字段進(jìn)行比較。
當(dāng)在$group聚合管道上操作時(shí),多個(gè)文檔與創(chuàng)建的新文檔中定義的字段匹配。MongoDB提供了一組你可以應(yīng)用到這些文檔的運(yùn)算符,并用它在原來(lái)文檔集的字段值的基礎(chǔ)上計(jì)算新組文檔中的字段值。下表列出了$group表達(dá)式運(yùn)算符。
運(yùn)算符 | 說(shuō)明 |
$addToSet | 返回一組文檔中所有文檔所選字段的全部唯一值的數(shù)組。例如:colors:{$addToSet:"color"} |
$first | 返回一組文檔中一個(gè)字段的第一個(gè)值。例如:firstValue:{$first:"$value"} |
$last | 返回一組文檔中一個(gè)字段的最后一個(gè)值。例如:lastValue:{$last:"$value"} |
$max | 返回一組文檔中一個(gè)字段的最大值。例如:maxValue:{$max:"$value"} |
$min | 返回一組文檔中一個(gè)字段的最小值。例如:minValue:{$min:"$value"} |
$avg | 返回一組文檔中以個(gè)字段的平均值。例如:avgValue:{$avg:"$value"} |
$push | 返回一組文檔中所有文檔所選字段的全部值的數(shù)組。例如:username:{$push:"$username"} |
$sum | 返回一組文檔中以個(gè)字段的全部值的總和。例如:total:{$sum:"$value"} |
此外,計(jì)算新的字段值時(shí),可以應(yīng)用一些字符串和算術(shù)運(yùn)算符。下表列出了在聚合運(yùn)算符中計(jì)算新字段值可以應(yīng)用的最常用的一些運(yùn)算符。
運(yùn)算符 | 說(shuō)明 |
$add | 計(jì)算數(shù)值的總和。例如:valuePlus5:{$add:["$value",5]} |
$divide | 給定兩個(gè)數(shù)值,用第一個(gè)數(shù)除以第二個(gè)數(shù)。例如:valueDividedBy5:{$divide:["$value",5]} |
$mod | 取模。例如:{$mod:["$value",5]} |
$multiply | 計(jì)算數(shù)值數(shù)組的乘積。例如:{$multiply:["$value",5]} |
$subtract | 給定兩個(gè)數(shù)值,用第一個(gè)數(shù)減去第二個(gè)數(shù)。例如:{$subtract:["$value",5]} |
$concat | 連接兩個(gè)字符串 例如:{$concat:["str1","str2"]} |
$strcasecmp | 比較兩個(gè)字符串并返回一個(gè)整數(shù)來(lái)反應(yīng)比較結(jié)果。例如 {$strcasecmp:["$value","$value"]} |
$substr | 返回字符串的一部分。例如:hasTest:{$substr:["$value","test"]} |
$toLower | 將字符串轉(zhuǎn)化為小寫(xiě)。 |
$toUpper | 將字符串轉(zhuǎn)化為大寫(xiě) |
總結(jié)
到此這篇關(guān)于MongoDB中aggregate()方法實(shí)例詳解的文章就介紹到這了,更多相關(guān)MongoDB aggregate()方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)詳解
這篇文章主要給大家介紹了MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06Linux下MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)備份詳解
這篇文章主要給大家介紹了在Linux系統(tǒng)下下MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)備份的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06MongoDB 刪除文檔的方式(刪除一個(gè)、批量刪除)
這篇文章主要介紹了MongoDB 刪除文檔的方式(刪除一個(gè)、批量刪除),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04mongodb 集群重構(gòu)和釋放磁盤(pán)空間實(shí)例詳解
這篇文章主要介紹了mongodb 集群重構(gòu)和釋放磁盤(pán)空間實(shí)例詳解的相關(guān)資料,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11解決MAC上啟動(dòng)mongod報(bào)錯(cuò)exiting with code 1的問(wèn)題
這篇文章主要介紹了解決MAC上啟動(dòng)mongod報(bào)錯(cuò)exiting with code 1的問(wèn)題,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12centos7安裝mongo數(shù)據(jù)庫(kù)的方法(mongo4.2.8)
這篇文章給大家介紹了centos7安裝mongo4.2.8數(shù)據(jù)庫(kù)的詳細(xì)過(guò)程,包括mongo數(shù)據(jù)庫(kù)安裝和啟動(dòng)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-01-01批量備份還原導(dǎo)入與導(dǎo)出MongoDB數(shù)據(jù)方式
前面我們介紹了mongoDB的安裝與配置,接下來(lái)我們講一講如何使用mongo的可視化工具Navicat對(duì)mongo數(shù)據(jù)庫(kù)進(jìn)行操作和如何在終端進(jìn)行mongo數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的批量操作2021-09-09MongoDB學(xué)習(xí)筆記之分組(group)使用示例
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之分組(group)使用示例,本文直接給出一組測(cè)試數(shù)據(jù),然后練習(xí)分組的基本使用,需要的朋友可以參考下2015-07-07