摘要:什么是類似于拆分結(jié)果然后對結(jié)果進(jìn)行分析求值然后再返回新結(jié)果文檔聚合官方運(yùn)用篇個(gè)人總結(jié)案例一案例二案例三案例那么有什么作用呢舉個(gè)例子文檔中有如下幾個(gè)集合集合一集合二集合三我們想篩選出中為的集合理所當(dāng)然我們會這樣寫當(dāng)然這樣寫是能拿到結(jié)
什么是aggregate
aggregate類似于pipe.拆分結(jié)果然后對結(jié)果進(jìn)行分析求值然后再返回新結(jié)果..
文檔MongoDB聚合
官方API
MongoDB aggregate 運(yùn)用篇 個(gè)人總結(jié) - fycayy
案例一
案例二
案例三
那么aggregate有什么作用呢?舉個(gè)例子 testName文檔中有如下幾個(gè)集合
//集合一 { _id:1, list:[ {name:"x",age:11,sex:"boy"}, {name:"y",age:12,sex:"girl"}, {name:"z",age:13,sex:"boy"}, {name:"n",age:14,sex:"boy"}, ] } //集合二 { _id:2, list:[ {name:"q",age:15,sex:"boy"}, {name:"w",age:16,sex:"girl"}, {name:"e",age:17,sex:"girl"}, {name:"r",age:18,sex:"boy"}, ] } //集合三 { _id:3, list:[ {name:"a",age:19,sex:"girl"}, {name:"s",age:20,sex:"girl"}, {name:"d",age:21,sex:"girl"}, {name:"f",age:22,sex:"boy"}, ] }
我們想篩選出list中sex為boy的集合.理所當(dāng)然我們會這樣寫
db.testName.find({"list":{"$elemMatch":{"sex":"boy"}}})
當(dāng)然這樣寫是能拿到結(jié)果的.拿到的是什么結(jié)果呢?結(jié)果會返回所有的sex=boy的集合,并且sex=girl的數(shù)據(jù)也包含在內(nèi).但是我們只想要sex=boy的數(shù)據(jù).這時(shí)候就可以用聚合查詢了
聚合查詢db.testName.aggregate( {"$unwind":"$list"}, {"$match":{"list.sex":{"$eq":"boy"}}}, { "$group":{ "_id":"$_id", "results":{ "$push"{"name":"$list.name","age":"$list.age","sex":"$list.sex"} } } } )
okay,不要怕.我們慢慢來分析 首先從$unwind來分析.$unwind會拆分?jǐn)?shù)組元素拆分成一個(gè)一個(gè)集合那么這條參數(shù)執(zhí)行后會得到什么結(jié)果呢?
{ _id:1, list:{name:"x",age:11,sex:"boy"}, } { _id:1, list:{name:"y",age:12,sex:"girl"}, } { _id:1, list:{name:"z",age:13,sex:"boy"}, } ...
會拆分成一條條的臨時(shí)集合,這個(gè)臨時(shí)集合的名稱就是$list,這就相當(dāng)于第一道工藝程序把數(shù)組拆分開.接下來交給第二道程序{"$match":{"list.sex":{"$eq":"boy"}}} 這條語句作用是啥呢?想必大家也知道了.就是對臨時(shí)的集合進(jìn)行一個(gè)查詢,類似于db.$list.find(),那么查詢到的肯定就是sex=boy的數(shù)據(jù)了 現(xiàn)在返回的數(shù)據(jù)就是 不會有sex=girl的存在了
{ _id:1, list:{name:"x",age:11,sex:"boy"}, } { _id:1, list:{name:"z",age:13,sex:"boy"}, } ....
接下來就是要把這些組合在一起,也就是第三道工藝程序
{ "$group":{ "_id":"$_id", "results":{ "$push"{"name":"$list.name","age":"$list.age","sex":"$list.sex"} } } }
其實(shí)也很好理解,$group就是組合的意思,把這些零散的數(shù)據(jù)以我們想要的形式組合起來.這個(gè)$_id指的就是臨時(shí)集合中的_id.那么$list就是臨時(shí)集合中的list,以_id為首把這些零散的list給組合成一個(gè)新的數(shù)組就是聚合.$push是添加一個(gè)對象,當(dāng)然也有更簡單的方式
{ "$group":{ "_id":"$_id", "results":{ "$push":"$list" } } }
這樣就直接把整個(gè)list對象給push到一個(gè)數(shù)組中.那么這樣查詢最終返回的結(jié)果就是我們想要的結(jié)果了
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79372.html
摘要:什么是類似于拆分結(jié)果然后對結(jié)果進(jìn)行分析求值然后再返回新結(jié)果文檔聚合官方運(yùn)用篇個(gè)人總結(jié)案例一案例二案例三案例那么有什么作用呢舉個(gè)例子文檔中有如下幾個(gè)集合集合一集合二集合三我們想篩選出中為的集合理所當(dāng)然我們會這樣寫當(dāng)然這樣寫是能拿到結(jié) 什么是aggregate aggregate類似于pipe.拆分結(jié)果然后對結(jié)果進(jìn)行分析求值然后再返回新結(jié)果.. 文檔 MongoDB聚合官方APIMongo...
摘要:將返回結(jié)果限制為前個(gè)。所以,聚合的結(jié)果必須要限制在以內(nèi)支持的最大響應(yīng)消息大小。包含字段和排除字段的規(guī)則與常規(guī)查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數(shù)據(jù)存儲在Mon...
摘要:將返回結(jié)果限制為前個(gè)。所以,聚合的結(jié)果必須要限制在以內(nèi)支持的最大響應(yīng)消息大小。包含字段和排除字段的規(guī)則與常規(guī)查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數(shù)據(jù)存儲在Mon...
摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
閱讀 1310·2021-11-22 14:44
閱讀 2445·2021-09-30 09:47
閱讀 1221·2021-09-09 11:56
閱讀 2077·2021-09-08 09:45
閱讀 3953·2021-08-31 09:40
閱讀 1250·2019-08-30 15:52
閱讀 2044·2019-08-30 14:09
閱讀 1578·2019-08-26 17:04