網站首頁 編程語言 正文
前言
MongoDB的一個很大的好處是能夠使用MapReduce來吧數據庫查詢的結果簡化成一個與原來的集合完全不同的結構。MapReduce把一個數據庫查詢的值映射為一個完全不同的形式,然后簡化結果,使它們的可用性更好。
MongoDB有一個MapReduce框架,它也允許你使用聚合來簡化吧一個MapReduce操作傳輸到另一個MapReduce操作的一系列過程。有了MapReduce和聚合,可以用數據生成一些不平凡的業績。聚合的概念是指,在把MongoDB服務器上的文檔匯編為一個結果集時,對它們執行一些列的操作。這比在Node.js應用程序中檢索它們和處理它們更高效,因為MongoDB的服務器可以在本地操作數據塊。
1,了解aggergate()方法
Collection對象提供了aggregate()方法來對數據進行聚合操作。aggregate()方法的語法如下
aggregate(operators,[options],callback)
operators參數是如表1所示的聚合運算符的數組,它允許你定義對數據執行什么匯總操作。options參數允許你設置readPreference屬性,它定義了從哪里讀取數據。callback參數是接受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 | 限定可以傳遞到聚合操作的下一個管道中的文檔數量。例如{$limit:5} |
$skip | 指定處理聚合操作的下一個管道前跳過的一些文檔 |
$unwind | 指定一個數組字段用于分割,對每個值創建一個單獨的文檔。例如{$unwind:"$myArr"} |
$group |
把文檔分成一組新的文檔用于在管道中的下一級。新對象的字段必須在$group對象中定義。你還可以把表2中列出的分組表 達式運算符應用到該組的多個文檔中。例如,使用下面的語句匯總value字段:{$group:{set_id:"$0_id",total:{$sum:"$value"}}} |
$sort |
在把文檔傳遞給處理聚合操作的下一個管道前對它們排序。排序指定一個帶有field:<sort_order>屬性的對象,其中<sort_order> 為1表示升序,而-1表示降序 |
2,實現聚合表達式運算符
當你實現聚合運算符時,你建立將傳遞到聚合操作流水線的下一級的新文檔。MongoDB的聚合框架提供了許多表達式運算符,它們有助于對新字段計算值或對文檔中的現有字段進行比較。
當在$group聚合管道上操作時,多個文檔與創建的新文檔中定義的字段匹配。MongoDB提供了一組你可以應用到這些文檔的運算符,并用它在原來文檔集的字段值的基礎上計算新組文檔中的字段值。下表列出了$group表達式運算符。
運算符 | 說明 |
$addToSet | 返回一組文檔中所有文檔所選字段的全部唯一值的數組。例如:colors:{$addToSet:"color"} |
$first | 返回一組文檔中一個字段的第一個值。例如:firstValue:{$first:"$value"} |
$last | 返回一組文檔中一個字段的最后一個值。例如:lastValue:{$last:"$value"} |
$max | 返回一組文檔中一個字段的最大值。例如:maxValue:{$max:"$value"} |
$min | 返回一組文檔中一個字段的最小值。例如:minValue:{$min:"$value"} |
$avg | 返回一組文檔中以個字段的平均值。例如:avgValue:{$avg:"$value"} |
$push | 返回一組文檔中所有文檔所選字段的全部值的數組。例如:username:{$push:"$username"} |
$sum | 返回一組文檔中以個字段的全部值的總和。例如:total:{$sum:"$value"} |
此外,計算新的字段值時,可以應用一些字符串和算術運算符。下表列出了在聚合運算符中計算新字段值可以應用的最常用的一些運算符。
運算符 | 說明 |
$add | 計算數值的總和。例如:valuePlus5:{$add:["$value",5]} |
$divide | 給定兩個數值,用第一個數除以第二個數。例如:valueDividedBy5:{$divide:["$value",5]} |
$mod | 取模。例如:{$mod:["$value",5]} |
$multiply | 計算數值數組的乘積。例如:{$multiply:["$value",5]} |
$subtract | 給定兩個數值,用第一個數減去第二個數。例如:{$subtract:["$value",5]} |
$concat | 連接兩個字符串 例如:{$concat:["str1","str2"]} |
$strcasecmp | 比較兩個字符串并返回一個整數來反應比較結果。例如 {$strcasecmp:["$value","$value"]} |
$substr | 返回字符串的一部分。例如:hasTest:{$substr:["$value","test"]} |
$toLower | 將字符串轉化為小寫。 |
$toUpper | 將字符串轉化為大寫 |
總結
原文鏈接:https://blog.csdn.net/qq_39263663/article/details/80459833
相關推薦
- 2022-04-11 利用Python操作excel表格的完美指南_python
- 2021-12-03 Go并發編程中sync/errGroup的使用_Golang
- 2022-12-05 C++?Boost?Heap使用實例詳解_C 語言
- 2022-09-15 Android?Jetpack庫剖析之ViewModel組件篇_Android
- 2022-12-10 Redis數據庫安全詳解_Redis
- 2022-09-06 C#任務并行Parellel.For和Parallel.ForEach_C#教程
- 2022-07-16 SpringMVC @Controller和@RequestMapping注解
- 2022-05-15 jquery事件綁定方法介紹_jquery
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支