MongoDB中aggregate()方法實(shí)例詳解
前言
MongoDB的一個(gè)很大的好處是能夠使用MapReduce來(lái)吧數(shù)據(jù)庫(kù)查詢的結(jié)果簡(jiǎn)化成一個(gè)與原來(lái)的集合完全不同的結(jié)構(gòu)。MapReduce把一個(gè)數(shù)據(jù)庫(kù)查詢的值映射為一個(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í),你建立將傳遞到聚合操作流水線的下一級(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)文章
Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案
在Windows系統(tǒng)中啟動(dòng)MongoDB時(shí)遇到連接拒絕的錯(cuò)誤,通常是因?yàn)榉?wù)未運(yùn)行或配置問(wèn)題,本文給大家分享Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案,一起看看吧2024-10-10
解決mongo的tickets被耗盡導(dǎo)致卡頓問(wèn)題
這篇文章主要介紹了解決mongo的tickets被耗盡導(dǎo)致卡頓問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
ubuntu mongodb安裝在哪個(gè)文件夾路徑詳解
這篇文章主要為大家介紹了ubuntu mongodb安裝在哪個(gè)文件夾的安裝路徑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
解決MongoDB 排序超過(guò)內(nèi)存限制的問(wèn)題
最近小編遇到這樣的問(wèn)題:對(duì)集合執(zhí)行一個(gè)大排序操作(如聚合),出現(xiàn)以下錯(cuò)誤:(測(cè)試版本:MongoDB 3.0.6),怎么快速解決此問(wèn)題呢?下面小編給大家分享MongoDB 排序超過(guò)內(nèi)存限制的解決方法,一起看看吧2017-07-07
MongoDB通過(guò)查詢與游標(biāo)徹底玩轉(zhuǎn)分布式文件存儲(chǔ)
MongoDB最大的特點(diǎn)是它支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引,這篇文章主要介紹了MongoDB查詢與游標(biāo),徹底玩轉(zhuǎn)分布式文件存儲(chǔ),需要的朋友可以參考下2023-01-01
MongoDB在不同主機(jī)間復(fù)制數(shù)據(jù)庫(kù)和集合的教程
MongoDB自帶了clone一族JavaScript函數(shù)來(lái)進(jìn)行數(shù)據(jù)的復(fù)制,這里我們總結(jié)了MongoDB在不同主機(jī)間復(fù)制數(shù)據(jù)庫(kù)和集合的教程,列舉出了一些主從復(fù)制操作中常用的重要函數(shù):2016-07-07
Vercel+MongoDB Atlas部署詳細(xì)指南
這篇文章主要為大家介紹了Vercel+MongoDB Atlas部署的詳細(xì)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

