国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

MongoDB aggregate 運(yùn)用篇個(gè)人總結(jié)

2020-10-29 18:48:00
字體:
供稿:網(wǎng)友

最近一直在用mongodb,有時(shí)候會(huì)需要用到統(tǒng)計(jì),在網(wǎng)上查了一些資料,最適合用的就是用aggregate,以下介紹一下自己運(yùn)用的心得。。

MongoDB 聚合
MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果。有點(diǎn)類似sql語句中的 count(*)。
aggregate() 方法
MongoDB中聚合的方法使用aggregate()。
語法
aggregate() 方法的基本語法格式如下所示:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
實(shí)例

集合中的數(shù)據(jù)如下:

{  _id: ObjectId(7df78ad8902c)  title: 'MongoDB Overview',   description: 'MongoDB is no sql database',  by_user: 'VeVB.COm',  url: 'http://www.56wlw.com',  tags: ['mongodb', 'database', 'NoSQL'],  likes: 100},{  _id: ObjectId(7df78ad8902d)  title: 'NoSQL Overview',   description: 'No sql database is very fast',  by_user: 'VeVB.COm',  url: 'http://www.56wlw.com',  tags: ['mongodb', 'database', 'NoSQL'],  likes: 10},{  _id: ObjectId(7df78ad8902e)  title: 'Neo4j Overview',   description: 'Neo4j is no sql database',  by_user: 'Neo4j',  url: 'http://www.neo4j.com',  tags: ['neo4j', 'database', 'NoSQL'],  likes: 750},

現(xiàn)在我們通過以上集合計(jì)算每個(gè)作者所寫的文章數(shù),使用aggregate()計(jì)算結(jié)果如下:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]){  "result" : [   {     "_id" : "w3cschool.cc",     "num_tutorial" : 2   },   {     "_id" : "Neo4j",     "num_tutorial" : 1   }  ],  "ok" : 1}>

以上實(shí)例類似sql語句: select by_user, count(*) from mycol group by by_user
在上面的例子中,我們通過字段by_user字段對(duì)數(shù)據(jù)進(jìn)行分組,并計(jì)算by_user字段相同值的總和。
下表展示了一些聚合的表達(dá)式:

表達(dá)式 描述 實(shí)例
$sum 計(jì)算總和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 計(jì)算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 獲取集合中所有文檔對(duì)應(yīng)值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 獲取集合中所有文檔對(duì)應(yīng)值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在結(jié)果文檔中插入值到一個(gè)數(shù)組中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在結(jié)果文檔中插入值到一個(gè)數(shù)組中,但不創(chuàng)建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據(jù)資源文檔的排序獲取第一個(gè)文檔數(shù)據(jù)。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據(jù)資源文檔的排序獲取最后一個(gè)文檔數(shù)據(jù) db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念
管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個(gè)命令的參數(shù)。
MongoDB的聚合管道將MongoDB文檔在一個(gè)管道處理完畢后將結(jié)果傳遞給下一個(gè)管道處理。管道操作是可以重復(fù)的。
表達(dá)式:處理輸入文檔并輸出。表達(dá)式是無狀態(tài)的,只能用于計(jì)算當(dāng)前聚合管道的文檔,不能處理其它的文檔。
這里我們介紹一下聚合框架中常用的幾個(gè)操作:
$project:修改輸入文檔的結(jié)構(gòu)。可以用來重命名、增加或刪除域,也可以用于創(chuàng)建計(jì)算結(jié)果以及嵌套文檔。
$match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。$match使用MongoDB的標(biāo)準(zhǔn)查詢操作。
$limit:用來限制MongoDB聚合管道返回的文檔數(shù)。
$skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔。
$unwind:將文檔中的某一個(gè)數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個(gè)值。
$group:將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果。
$sort:將輸入文檔排序后輸出。
$geoNear:輸出接近某一地理位置的有序文檔。

管道操作符實(shí)例

1、$project實(shí)例

db.article.aggregate(  { $project : {    title : 1 ,    author : 1 ,  }} );

這樣的話結(jié)果中就只還有_id,tilte和author三個(gè)字段了,默認(rèn)情況下_id字段是被包含的,如果要想不包含_id話可以這樣:

db.article.aggregate(  { $project : {    _id : 0 ,    title : 1 ,    author : 1  }});

2.$match實(shí)例

db.articles.aggregate( [            { $match : { score : { $gt : 70, $lte : 90 } } },            { $group: { _id: null, count: { $sum: 1 } } }            ] );

$match用于獲取分?jǐn)?shù)大于70小于或等于90記錄,然后將符合條件的記錄送到下一階段$group管道操作符進(jìn)行處理。

3.$skip實(shí)例

db.article.aggregate(  { $skip : 5 });

經(jīng)過$skip管道操作符處理后,前五個(gè)文檔被"過濾"掉。

別人寫過的我就不過多描述了,大家一搜能搜索到N多一樣的,我寫一下我的總結(jié)。

基礎(chǔ)知識(shí)

請(qǐng)大家自行查找更多,以下是關(guān)鍵文檔。

操作符介紹:

$project:包含、排除、重命名和顯示字段
$match:查詢,需要同find()一樣的參數(shù)
$limit:限制結(jié)果數(shù)量
$skip:忽略結(jié)果的數(shù)量
$sort:按照給定的字段排序結(jié)果
$group:按照給定表達(dá)式組合結(jié)果
$unwind:分割嵌入數(shù)組到自己頂層文件


文檔:MongoDB 官方aggregate說明。

相關(guān)使用:

db.collection.aggregate([array]);

array可是是任何一個(gè)或多個(gè)操作符。
group和match的用法,使用過sqlserver,group的用法很好理解,根據(jù)指定列進(jìn)行分組統(tǒng)計(jì),可以統(tǒng)計(jì)分組的數(shù)量,也能統(tǒng)計(jì)分組中的和或者平均值等。
group之前的match,是對(duì)源數(shù)據(jù)進(jìn)行查詢,group之后的match是對(duì)group之后的數(shù)據(jù)進(jìn)行篩選;

同理,sort,skip,limit也是同樣的原理;

 {_id:1,name:"a",status:1,num:1} {_id:2,name:"a",status:0,num:2} {_id:3,name:"b",status:1,num:3} {_id:4,name:"c",status:1,num:4} {_id:5,name:"d",status:1,num:5}

以下是示例:
應(yīng)用一:統(tǒng)計(jì)name的數(shù)量和總數(shù);

db.collection.aggregate([  {$group:{_id:"$name",count:{$sum:1},total:{$sum:"$num"}}]);

應(yīng)用二:統(tǒng)計(jì)status=1的name的數(shù)量;

db.collection.aggregate([  {$match:{status:1}},  {$group:{_id:"$name",count:{$sum:1}}}]);

應(yīng)用三:統(tǒng)計(jì)name的數(shù)量,并且數(shù)量為小于2的;

db.collection.aggregate([  {$group:{_id:"$name",count:{$sum:1}},  {$match:{count:{$lt:2}}}]);

應(yīng)用四:統(tǒng)計(jì)stauts=1的name的數(shù)量,并且數(shù)量為1的;

db.collection.aggregate([  {$match:{status:1}},  {$group:{_id:"$name",count:{$sum:1}}},  {$match:{count:1}}]);

多列g(shù)roup,根據(jù)name和status進(jìn)行多列

db.collection.aggregate([  {$group:{_id:{name:"$name",st:"$status"},count:{$sum:1}}}]);

$project該操作符很簡(jiǎn)單,

db.collection.aggregate([  {$project:{name:1,status:1}}]);

結(jié)果是,只有_id,name,status三個(gè)字段的表數(shù)據(jù),相當(dāng)于sql表達(dá)式 select _id,name,status from collection
 
$unwind
這個(gè)操作符可以將一個(gè)數(shù)組的文檔拆分為多條文檔,在特殊條件下有用,本人暫沒有進(jìn)行過多的研究。
 
以上基本就可以實(shí)現(xiàn)大部分統(tǒng)計(jì)了,group前條件,group后條件,是重點(diǎn)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
最近中文字幕av免费高清| 国产农村一级特黄α**毛片 | 国产精品国产三级国产试看| 精品美女在线观看视频在线观看| 国产区高清在线| 中文字幕2020第一页| 色综合久久五月天| 最近中文av字幕在线中文| 最近最好的中文字幕2019免费 | 69堂视频在线观看国产| 在线中文字幕资源| 本道综合精品| 九九热在线视频| 18加网站在线| 人成在线免费视频| 国产一级二级在线| www狠狠操| 精品国产免费观看一区| 开心激情五月婷婷| 在线成人一区| 国产天堂在线| 丁香花在线电影小说观看| 国产激情自拍视频| 丁香在线视频| 欧美亚洲天堂| 在线观看av网站永久| 综合激情丁香| av资源网站在线观看| 国产一卡2卡3卡四卡网站| www.狠狠色.com| 国产激情在线| 国产一二三区精品视频| 老鸭窝av在线| 四虎国产精品永久在线| 国产精品久久久久白浆| 狠狠操视频网| 国产精品臀控福利在线观看| 日本三级在线视频| 香蕉视频在线观看www| 国产福利视频在线观看| 尤物在线视频| 91超碰免费在线| 男人操女人免费网站| 国产高清大尺度一区二区不卡| 九九热视频免费在线观看| 欧美视频免费一区二区三区| www网站在线观看| 亚洲wwwwww| 欧美精品se| 国产美女av在线| 天天操天天曰| 国产精品入口免费麻豆| 国产日韩欧美一区二区三区视频| 狠狠操天天操夜夜操| 成视频年人免费看黄网站| 成人亚洲一区二区三区| 最近中文字幕在线中文视频| 五月综合网站| 国产精品伦一区二区三区视频| 国产精品久久久久一区二区国产| 国产黄a三级三级三级av在线看 | 狠狠插狠狠操| 国产视频一二区| 国产高清在线看| h网站久久久| 中文字幕麻豆| 亚洲精品白浆| 四虎久久影院| 国产一级二级在线| 亚洲www色| 国产美女视频一区二区三区 | 国产一二三区在线观看| 91最新在线| 国产在线观看a| 亚洲精品视频在线免费| 国产免费av高清在线| 97在线超碰| 国产一区二区三区不卡免费观看| 国产xxxxx| 黄色av网站在线免费观看| 国产精品久久久久白浆| 欧美啪啪精品| 亚洲最新永久观看在线| 国产精品入口麻豆高清| 久草在线资源福利| 日本欧洲一区| 在线午夜视频| 国产精品被窝福利一区| 国产另类图片| 丁香花高清视频完整版在线观看| 热99在线观看| 玖玖在线视频| 欧美性猛交p30| 午夜影院免费| 亚洲最新永久观看在线| 精品51国产黑色丝袜高跟鞋| 国产三级在线免费观看| 综合蜜桃精品| 日本视频在线观看一区二区三区| 日本aⅴ写真网站免费| 本道综合精品| 国产一区二区三区四区尤物| 国产在线你懂得| 国产中文字幕在线| 免费影视观看网站入口| 久草视频国产| 国产美女自拍视频| 国产一卡2卡3卡免费网站| 久久久久久久美女| 国产中文字幕av| 好男人社区在线视频| 欧洲一区av| 国产尤物视频在线| 国产一区二区影视| 精品卡1卡2卡三卡免费网站| 国产9色视频| 伊人影院在线播放| 日本成人a视频| 国产女人伦码一区二区三区不卡| 狠狠狠狠狠狠操| 国产三级香港三韩国三级| 国产黄色在线观看| 青青在线视频| 国产极品美女到高潮| 伊人网在线观看| 黄色av网站在线| 国产不卡视频| 青青草在线免费观看| 午夜不卡视频| 亚洲wwwwww| 五月天婷婷基地| eeuss影院在线播放| 午夜视频在线看| 日韩a视频在线观看| 国产第一页在线视频| 牛牛热在线视频| 91福利在线视频| 成人免费一区二区三区视频网站| 国产黄色片中文字幕| 开心激情五月婷婷| 亚洲第一成年免费网站| 国产精品视频h| 午夜视频在线观看网站午夜视频在线 | 日本h视频在线观看| 最近高清中文在线字幕在线观看| 在线视频福利| 国产精品18久久久久网站| 激情综合网五月激情| 99久久精品免费观看国产| 激情六月丁香| www.jizz在线观看| 亚洲精品男人| 亚洲欧美日韩一区成人| 精品欧美日韩一区二区 | 麻豆福利在线观看| 天堂中文在线观看| 在线欧美一级视频| 国产成人久久精品77777| 国产麻豆视频免费观看| 蜜桃视频中文字幕| 久草网在线视频| 国产中文在线| 狠狠干婷婷色| 成人欧美亚洲| 中文字幕第一页在线| 国产婷婷视频在线| 国产精品麻豆一区二区三区| 国产青草视频在线观看视频| 国产偷窥洗澡视频| 国产黄色在线网站| 在线中文av| 四虎网站在线观看| 久久综合第一页| 国产剧情av在线| 中文字幕在线影视资源| 国产精品黄页网站在线播放免费| 国产一级片网站| 国产精品白浆流出视频| 精品视频vs精品视频| 波多野结衣中文字幕久久| 狠狠操视频网| 91久久精品国产性色| 午夜小视频在线| 国产美女自拍视频| 国产福利电影在线| 四虎成年永久免费网站| 好看的中文字幕在线播放| 国产视频一二区| 天天操夜夜添| 中文字幕视频在线免费| 中文视频在线| 大香伊人中文字幕精品| 国产一卡2卡3卡免费网站| 在线天堂中文www视软件| 九色精品视频在线观看| 中文天堂av| 国产高清在线看| 久草视频国产| 香蕉视频网站在线播放| 国产精品伦一区二区三区级视频频|