mongoDB資料庫之聚合

一起學python吧發表於2020-11-28

使用聚合框架可以對集合中的文件進行變換和組合,用多個構件建立一個管道,用於對一連串的文件進行處理!構件包括篩選(filtering

), 投射(projecting),分組(grouping),排序(sorting),限制(limiting)和跳過(skipping)等

使用方法是使用aggregate函式

# 語法:
db.col.aggregate({"$構件": {"欄位名": 1}})

①:"$project"的使用

這個方法是使用類似於查詢中的欄位選擇器 --> db.col.find({"xx":"xxx"}, {"name":1, "age":1, "gender": 0})

例:

②:"$group"的使用

這個方法會按照指定欄位分組,由"_id"指定

例:如果按下面使用方式,加上count的話,表示如果zone對應的名字出現一次,就會對其加1

③:"$sort"的使用

這個方法會根據指定欄位排序(正序1或者倒序-1),和使用sort方法一樣

例:

④:"$limit"的使用

這個方法會指定數量返回,和limit方法一樣

例:

綜合使用上述構件如下:

例:

****************************************************************************************************************************************************************************************************************************************

以上為幾個構件的簡單使用,構件還可以有更加複雜的用法

一:"$project"

 (1) 管道表示式

        就是上面的使用方式

 (2) 數學表示式

        操作符:"$add" 接收一個或多個表示式,將這些表示式相加

                      "$subtract" 接收兩個表示式,用第一個表示式減去第二個表示式作為結果

                      "$multiply"  接收一個或多個表示式,將其相乘

                      "$divide"   接收兩個表示式,用第一個除以第二個商作為結果

                     "$mod"  接收兩個表示式,用第一個除以第二個餘數作為結果

(3)日期表示式

        操作符: "$year" 提取年份

                       "$month" 提取月份

                      "$week" 提取周

                      "$dayOfMonth" 提取月中的第幾天

                      "$dayOfWeek" 提取週中的第幾天

                      "$dayOfYyear" 提取年中的第幾天

                      "$hour" 提取小時

                      "$minute" 提取分鐘

                     "$second" 提取秒

  (4)字串表示式

        操作符 :"$substr" 擷取字串

                       "$concat" 將給定表示式中字串連線在一起

                       "$toLower" 返回小寫形式

                       "$toUpper" 返回大寫形式

   (5) 邏輯表示式

        操作符: "$cmp" 比較兩個值,前者大返回正數,反之,返回負數

                       "$strcasecmp" 比較兩個字串

                       "$eq/ne/gt/gte/lt/lte" 比較兩個值,返回大的值

                      "$and" 如果所有表示式值都是true,則返回true,反之,返回false

                      "$or" 只要有任意表示式值是true,則返回true

                      "$not" 對錶達式取反

二:"$group"

   (1) 分組操作符,上面所述

   (2) 算術操作符:

           "$sum" 計算總出現次數

          "$avg": 計算平均值

    (3) 極值操作符

         "$max" 最大值

         "$min" 最小值

         "$first"  第一個值

         "$last" 最後一個值

(4)陣列操作符

       "$addToSet" 如果表示式不包含在當前陣列中,則新增

       "$push" 不管是是什麼值都新增到陣列中

三,"$unwind" 將陣列中的每一個值拆分為單獨的文件,例如,有一篇擁有多條評論的文章,可以使用其將每條評論拆分為獨立的文件

資料格式:{"_id": xx, "post": "hello", "author": "xx", "comments": [{}, {}, {}]}

#語法:
db.xx.aggregate({"$unwind": "$comments"})

     

相關文章