1. 程式人生 > >Mongodb aggregation 基本操作示例

Mongodb aggregation 基本操作示例

6.5 find 記錄 查詢條件 logs 字段值 pan 示例 統計

MongoDB二個主要的操作:一個是查詢,另一個是統計。對於查詢而言,主要是find()方法,再配合Filters組合多個查詢條件。

對於統計而言,則主要是aggregate操作,比如 group、sum、avg、project、match……

aggregate可以將上述操作組織成 pipeline 形式,依次經過各種操作處理。

本文是MongoDB University M101的課程筆記,主要記錄:MongoDB aggregate的一些常用操作。

①project

它是個1:1的操作,即一個Document輸入給project處理,輸出一個新的Document。它主要對Key進行處理(大小寫轉換、刪除原來Document某些Key……)

比如原Document如下:

{
    "city" : "ACMAR",
    "loc" : [
        -86.51557,
        33.584132
    ],
    "pop" : 6055,
    "state" : "AL",
    "_id" : "35004"
}

想把它變成:

{
    "city" : "acmar",
    "pop" : 6055,
    "state" : "AL",
    "zip" : "35004"
}

使用:project操作符進行處理:

db.zips.aggregate([
{$project:{_id:0, city
:{$toLower:"$city"}, pop:1, state:1, zip:"$_id"}}
])
_id:0  去掉原Document中的_id字段;city:{$ toLower:"$city"}   對原Document中的 "$city" 的值全部轉換成小寫,賦給新city字段

pop:1 state:1 表示將原Document中的 pop 字段、state 字段 放到新Document中

zip:"$_id" 將原Document中的 ‘_id‘字段值  賦值給 新的 "zip" 字段  

②group avg,根據分組求平均值。比如某個Document格式如下:對 state字段進行分組,求每個state的人口(pop)的平均值

{
    "city" : "FISHERS ISLAND",
    "loc" : [
            -72.017834,
            41.263934
    ],
    "pop" : 329,
    "state" : "NY",
    "_id" : "06390"
}

db.zips.aggregate([
{"$group":{"_id":"$state", "average_pop":{"$avg":"$pop"}}}
])

$group表示分組操作,執行該操作後會生成一個新Document。

_id:$state 表示對 $state 字段進行分組,生成的新Document的 _id 為 state的值
"$avg":"$pop" 表示對原Document中的 “pop”字段按 $state 分組求平均值。得到的平均值為 "average_pop"字段的值。

最終的結果如下:

{ "_id" : "NY", "average_pop" : 9705.34 }
{ "_id" : "CT", "average_pop" : 13226.48 }
{ "_id" : "CA", "average_pop" : 19067.72 }
{ "_id" : "NJ", "average_pop" : 16949.9 }

③match

Document示例如下:想要過濾人口字段(pop)大於100 000 的所有記錄。

{
    "city" : "ACMAR",
    "loc" : [
        -86.51557,
        33.584132
    ],
    "pop" : 6055,
    "state" : "AL",
    "_id" : "35004"
}

db.zips.aggregate([
{$match:{
    pop:{$gt:100000}
    }
}
])

$match表示對 Document進行過濾

pop:{$gt:100000} 表示根據 pop 字段過濾,過濾的條件為 pop 的值大於100000

Mongodb aggregation 基本操作示例