【mongoDB查詢進階】聚合管道(一) -- 初識

前言:通常查詢能夠經過find方法,但若是是比較複雜的查詢或者數據統計的話,find可能就無能爲力了,這時也許你須要的是aggregate.mongodb

什麼是聚合管道(aggregation pipeline)

英文文檔中是aggregation pipeline,直譯爲聚合管道,它能夠對數據文檔進行變換和組合。聚合管道是基於數據流概念,數據進入管道通過一個或多個stage,每一個stage對數據進行操做(篩選,投射,分組,排序,限制或跳過)後輸出最終結果。數據庫

官方示例

officalExp示例來源:https://docs.mongodb.com/manual/core/aggregation-pipeline/數組

解釋
  • orders是一個文檔集合
  • aggregate是聚合方法,參數是數組,每一個數組元素的就是一個stage,對數據進行處理,處理完流到下一個stage
  • $match是匹配操做符,篩選出status是A的文檔
  • $group是分組操做符,以cust_id爲分組條件,相同的cust_id分爲同組
  • $sum是算術操做符,{ $sum: '$amount' }表示分組後,計算amount的總和。

管道操做符介紹

mongoDB中有許多操做符,在aggregate中每一個stage能夠使用的操做符叫作管道操做符,如下列舉比較經常使用的管道操做符:spa

操做符 簡述
$project 投射操做符,用於重構每個文檔的字段,能夠提取字段,重命名字段,甚至能夠對原有字段進行操做後新增字段
$match 匹配操做符,用於對文檔集合進行篩選
$group 分組操做符,用於對文檔集合進行分組
$unwind 拆分操做符,用於將數組中的每個值拆分爲單獨的文檔
$sort 排序操做符,用於根據一個或多個字段對文檔進行排序
$limit 限制操做符,用於限制返回文檔的數量
$skip 跳過操做符,用於跳過指定數量的文檔
$lookup 鏈接操做符,用於鏈接同一個數據庫中另外一個集合,並獲取指定的文檔,相似於populate
$count 統計操做符,用於統計文檔的數量

更多操做符介紹詳見官網:https://docs.mongodb.com/manual/reference/operator/aggregation/排序

操做符先簡單介紹一下,由於裏面還能夠大有文章,留在下一篇。ip

小結

db.collection.aggregate([])是聚合管道查詢使用的方法,參數是數組,每一個數組元素就是一個stage,stage中運用操做符對數據進行處理後再交由下一個stage,直到沒有下個stage,就輸出最終的結果,而數據的處理則是經過使用操做符,本文先簡單介紹了一下有哪些經常使用的操做符,下一篇再詳細說明。rem

相關文章
相關標籤/搜索