關(guān)于mongoDB的聚合操作_aggregate()歸納詳解
mongoDB聚合操作
mongoDB聚合常用的管道有
- $match: 過(guò)濾管道過(guò)濾數(shù)據(jù),只輸出符合條件的文檔
- $group: 將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果
- $project 映射管道,映射輸出
- $sort: 排序管道,將輸入文檔排序后輸出
- $limit: 限制管道,限制聚合管道返回的文檔書
- $skip: 跳過(guò)管道,跳過(guò)指定數(shù)量的文檔,并返回余下的文檔
1.準(zhǔn)備一組數(shù)據(jù)
db.data.insertMany([{name:"Tom", city:"cityA",type:"aaa",num:609,age:18},
{name : "allen", city :"cityC", type: "bbb", num : 549,age:20},
{name :"jerry", city :"cityA", type :"bbb", num : 593,age:22},
{name :"frank", city : "cityB", type:"aaa", num : 657,age:21},
{name :"jack", city : "cityC", type:"aaa", num : 620,age:18},
{name :"alice", city : "cityB", type:"ccc", num : 584,age:20},
{name :"marry", city:"cityA", type:"bbb", num : 599,age:22}
])db.data.find()

2.$group 分組管道
2.1 統(tǒng)計(jì)單組
對(duì)city分組,并求每組num的平均值。
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'}}})
2.2 統(tǒng)計(jì)多組
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}})
3.$match 過(guò)濾管道
可以將其作用結(jié)果傳給后一個(gè)管道。
對(duì)city不是"cityC"的city分組(過(guò)濾掉“”cityC"),并求每組num的平均值。
db.data.aggregate({$match:{city:{$ne:"cityC"}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
對(duì)age≥20的city分組(過(guò)濾掉“”cityC"),并求每組num的平均值。
db.data.aggregate({$match:{age:{$gte:20}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
其中,
_id是分組的依據(jù)
avg_num是新定義的字段名
$avg 是求值方法的表達(dá)式,這里是求平均值的表達(dá)式
‘$city’ 指定的分組依據(jù)
‘$num’ 指定的要求值的字段
拓展 統(tǒng)計(jì)數(shù)據(jù)個(gè)數(shù)
如果要統(tǒng)計(jì)每組數(shù)據(jù)的個(gè)數(shù),則可以使用 $sum 實(shí)現(xiàn)。
$sum的功能是求某字段的和,用$sum計(jì)數(shù)時(shí),如統(tǒng)計(jì)每個(gè)city的人數(shù),可以寫成:
db.data.aggregate({$group:{_id:'$city',count:{$sum:1}}})
即對(duì)字段,常數(shù)1進(jìn)行計(jì)數(shù)。如果寫為{$sum:2},則計(jì)數(shù)結(jié)果為4,4,6。
4.$project 映射管道
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}},{$project:{avg_num:1}})
如圖,結(jié)果不再顯示avg_age,只顯示了_id和avg_num。
5.$sort $skip $limit
按年齡降序排列,跳過(guò)第一條,取前三條數(shù)據(jù)
db.data.aggregate({$sort:{age:-1}},{$skip:1},{$limit:3})
按年齡降序排列,取前三條數(shù)據(jù),跳過(guò)第一條,
db.data.aggregate({$sort:{age:-1}},{$limit:3},{$skip:1})
取前三個(gè)數(shù)據(jù),跳過(guò)第一個(gè),再降序排列
db.data.aggregate({$limit:3},{$skip:1},{$sort:{age:-1}})
管道的寫法不用考慮優(yōu)先級(jí)的問(wèn)題,從左到右依次執(zhí)行。
6.常用表達(dá)式補(bǔ)充
$sum: 計(jì)算總和, $sum:1 表示以?倍計(jì)數(shù)
$avg: 計(jì)算平均值
$min: 獲取最?值
$max: 獲取最?值
$push: 在結(jié)果?檔中插?值到?個(gè)數(shù)組中
$first: 根據(jù)資源?檔的排序獲取第?個(gè)?檔數(shù)據(jù)
$last: 根據(jù)資源?檔的排序獲取最后?個(gè)?檔數(shù)據(jù)
到此這篇關(guān)于關(guān)于mongoDB的聚合操作_aggregate()歸納詳解的文章就介紹到這了,更多相關(guān)mongoDB的聚合操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB入門教程之細(xì)說(shuō)MongoDB數(shù)據(jù)庫(kù)的增刪查改操作
這篇文章主要介紹了MongoDB入門教程之細(xì)說(shuō)MongoDB數(shù)據(jù)庫(kù)的增刪查改操作,本文環(huán)境是windows,所以以圖片形式講解,需要的朋友可以參考下2014-08-08
mongodb 添加用戶及權(quán)限設(shè)置詳解
我知道的關(guān)系型數(shù)據(jù)庫(kù)都是有權(quán)限控制的,什么用戶能訪問(wèn)什么庫(kù),什么表,什么用戶可以插入,更新,而有的用戶只有讀取權(quán)限。2014-07-07
mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過(guò)濾的方法步驟
這篇文章主要介紹了mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過(guò)濾的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
MongoDB入門教程之C#驅(qū)動(dòng)操作實(shí)例
這篇文章主要介紹了MongoDB入門教程之C#驅(qū)動(dòng)操作實(shí)例,即C#中操作MongoDB數(shù)據(jù)的方法和代碼示例,需要的朋友可以參考下2014-08-08

