MongoDB中aggregate()方法實例詳解
前言
MongoDB的一個很大的好處是能夠使用MapReduce來吧數(shù)據(jù)庫查詢的結(jié)果簡化成一個與原來的集合完全不同的結(jié)構(gòu)。MapReduce把一個數(shù)據(jù)庫查詢的值映射為一個完全不同的形式,然后簡化結(jié)果,使它們的可用性更好。
MongoDB有一個MapReduce框架,它也允許你使用聚合來簡化吧一個MapReduce操作傳輸?shù)搅硪粋€MapReduce操作的一系列過程。有了MapReduce和聚合,可以用數(shù)據(jù)生成一些不平凡的業(yè)績。聚合的概念是指,在把MongoDB服務器上的文檔匯編為一個結(jié)果集時,對它們執(zhí)行一些列的操作。這比在Node.js應用程序中檢索它們和處理它們更高效,因為MongoDB的服務器可以在本地操作數(shù)據(jù)塊。
1,了解aggergate()方法
Collection對象提供了aggregate()方法來對數(shù)據(jù)進行聚合操作。aggregate()方法的語法如下
aggregate(operators,[options],callback)
operators參數(shù)是如表1所示的聚合運算符的數(shù)組,它允許你定義對數(shù)據(jù)執(zhí)行什么匯總操作。options參數(shù)允許你設置readPreference屬性,它定義了從哪里讀取數(shù)據(jù)。callback參數(shù)是接受err和res
| 運算符 | 說明 |
| $project | 通過重命名,添加或刪除字段重塑文檔。你也可以重新計算值,并添加子文檔。例如,下面的例子包括title并排除name: {$project:{title:1,name:0}} 以下是把name重命名為title的例子: {$project{title:"$name"}} 下面是添加一個新的total字段,并用price和tax字段計算它的值的例子: {$project{total:{$add:["$price","$tax"]}}} |
| $match | 通過使用query對象運算符來過濾文檔集。 |
| $limit | 限定可以傳遞到聚合操作的下一個管道中的文檔數(shù)量。例如{$limit:5} |
| $skip | 指定處理聚合操作的下一個管道前跳過的一些文檔 |
| $unwind | 指定一個數(shù)組字段用于分割,對每個值創(chuàng)建一個單獨的文檔。例如{$unwind:"$myArr"} |
| $group | 把文檔分成一組新的文檔用于在管道中的下一級。新對象的字段必須在$group對象中定義。你還可以把表2中列出的分組表 達式運算符應用到該組的多個文檔中。例如,使用下面的語句匯總value字段:{$group:{set_id:"$0_id",total:{$sum:"$value"}}} |
| $sort | 在把文檔傳遞給處理聚合操作的下一個管道前對它們排序。排序指定一個帶有field:<sort_order>屬性的對象,其中<sort_order> 為1表示升序,而-1表示降序 |
2,實現(xiàn)聚合表達式運算符
當你實現(xiàn)聚合運算符時,你建立將傳遞到聚合操作流水線的下一級的新文檔。MongoDB的聚合框架提供了許多表達式運算符,它們有助于對新字段計算值或?qū)ξ臋n中的現(xiàn)有字段進行比較。
當在$group聚合管道上操作時,多個文檔與創(chuàng)建的新文檔中定義的字段匹配。MongoDB提供了一組你可以應用到這些文檔的運算符,并用它在原來文檔集的字段值的基礎上計算新組文檔中的字段值。下表列出了$group表達式運算符。
| 運算符 | 說明 |
| $addToSet | 返回一組文檔中所有文檔所選字段的全部唯一值的數(shù)組。例如:colors:{$addToSet:"color"} |
| $first | 返回一組文檔中一個字段的第一個值。例如:firstValue:{$first:"$value"} |
| $last | 返回一組文檔中一個字段的最后一個值。例如:lastValue:{$last:"$value"} |
| $max | 返回一組文檔中一個字段的最大值。例如:maxValue:{$max:"$value"} |
| $min | 返回一組文檔中一個字段的最小值。例如:minValue:{$min:"$value"} |
| $avg | 返回一組文檔中以個字段的平均值。例如:avgValue:{$avg:"$value"} |
| $push | 返回一組文檔中所有文檔所選字段的全部值的數(shù)組。例如:username:{$push:"$username"} |
| $sum | 返回一組文檔中以個字段的全部值的總和。例如:total:{$sum:"$value"} |
此外,計算新的字段值時,可以應用一些字符串和算術(shù)運算符。下表列出了在聚合運算符中計算新字段值可以應用的最常用的一些運算符。
| 運算符 | 說明 |
| $add | 計算數(shù)值的總和。例如:valuePlus5:{$add:["$value",5]} |
| $divide | 給定兩個數(shù)值,用第一個數(shù)除以第二個數(shù)。例如:valueDividedBy5:{$divide:["$value",5]} |
| $mod | 取模。例如:{$mod:["$value",5]} |
| $multiply | 計算數(shù)值數(shù)組的乘積。例如:{$multiply:["$value",5]} |
| $subtract | 給定兩個數(shù)值,用第一個數(shù)減去第二個數(shù)。例如:{$subtract:["$value",5]} |
| $concat | 連接兩個字符串 例如:{$concat:["str1","str2"]} |
| $strcasecmp | 比較兩個字符串并返回一個整數(shù)來反應比較結(jié)果。例如 {$strcasecmp:["$value","$value"]} |
| $substr | 返回字符串的一部分。例如:hasTest:{$substr:["$value","test"]} |
| $toLower | 將字符串轉(zhuǎn)化為小寫。 |
| $toUpper | 將字符串轉(zhuǎn)化為大寫 |
總結(jié)
到此這篇關于MongoDB中aggregate()方法實例詳解的文章就介紹到這了,更多相關MongoDB aggregate()方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Windows系統(tǒng)啟動MongoDB報錯無法連接服務器的問題及解決方案
在Windows系統(tǒng)中啟動MongoDB時遇到連接拒絕的錯誤,通常是因為服務未運行或配置問題,本文給大家分享Windows系統(tǒng)啟動MongoDB報錯無法連接服務器的問題及解決方案,一起看看吧2024-10-10
MongoDB通過查詢與游標徹底玩轉(zhuǎn)分布式文件存儲
MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引,這篇文章主要介紹了MongoDB查詢與游標,徹底玩轉(zhuǎn)分布式文件存儲,需要的朋友可以參考下2023-01-01
MongoDB在不同主機間復制數(shù)據(jù)庫和集合的教程
MongoDB自帶了clone一族JavaScript函數(shù)來進行數(shù)據(jù)的復制,這里我們總結(jié)了MongoDB在不同主機間復制數(shù)據(jù)庫和集合的教程,列舉出了一些主從復制操作中常用的重要函數(shù):2016-07-07

