天天看點

【mongoDB查詢進階】聚合管道(一) -- 初識https://segmentfault.com/a/1190000010618355

https://segmentfault.com/a/1190000010618355

前言:一般查詢可以通過find方法,但如果是比較複雜的查詢或者資料統計的話,find可能就無能為力了,這時也許你需要的是aggregate.

什麼是聚合管道(aggregation pipeline)

英文文檔中是aggregation pipeline,直譯為聚合管道,它可以對資料文檔進行變換群組合。聚合管道是基于資料流概念,資料進入管道經過一個或多個stage,每個stage對資料進行操作(篩選,投射,分組,排序,限制或跳過)後輸出最終結果。

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

管道操作符介紹

mongoDB中有許多操作符,在aggregate中每個stage可以使用的操作符叫做管道操作符,以下列舉比較常用的管道操作符:

操作符 簡述
$project 投射操作符,用于重構每一個文檔的字段,可以提取字段,重命名字段,甚至可以對原有字段進行操作後新增字段
$match 比對操作符,用于對文檔集合進行篩選
$group 分組操作符,用于對文檔集合進行分組
$unwind 拆分操作符,用于将數組中的每一個值拆分為單獨的文檔
$sort 排序操作符,用于根據一個或多個字段對文檔進行排序
$limit 限制操作符,用于限制傳回文檔的數量
$skip 跳過操作符,用于跳過指定數量的文檔
$lookup 連接配接操作符,用于連接配接同一個資料庫中另一個集合,并擷取指定的文檔,類似于populate
$count 統計操作符,用于統計文檔的數量

小結

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