摘要:什么是類似于拆分結果然后對結果進行分析求值然后再返回新結果文檔聚合官方運用篇個人總結案例一案例二案例三案例那么有什么作用呢舉個例子文檔中有如下幾個集合集合一集合二集合三我們想篩選出中為的集合理所當然我們會這樣寫當然這樣寫是能拿到結
什么是aggregate
aggregate類似于pipe.拆分結果然后對結果進行分析求值然后再返回新結果..
文檔MongoDB聚合
官方API
MongoDB aggregate 運用篇 個人總結 - fycayy
案例一
案例二
案例三
那么aggregate有什么作用呢?舉個例子 testName文檔中有如下幾個集合
//集合一 { _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的集合.理所當然我們會這樣寫
db.testName.find({"list":{"$elemMatch":{"sex":"boy"}}})
當然這樣寫是能拿到結果的.拿到的是什么結果呢?結果會返回所有的sex=boy的集合,并且sex=girl的數據也包含在內.但是我們只想要sex=boy的數據.這時候就可以用聚合查詢了
聚合查詢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會拆分數組元素拆分成一個一個集合那么這條參數執行后會得到什么結果呢?
{ _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"}, } ...
會拆分成一條條的臨時集合,這個臨時集合的名稱就是$list,這就相當于第一道工藝程序把數組拆分開.接下來交給第二道程序{"$match":{"list.sex":{"$eq":"boy"}}} 這條語句作用是啥呢?想必大家也知道了.就是對臨時的集合進行一個查詢,類似于db.$list.find(),那么查詢到的肯定就是sex=boy的數據了 現在返回的數據就是 不會有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"} } } }
其實也很好理解,$group就是組合的意思,把這些零散的數據以我們想要的形式組合起來.這個$_id指的就是臨時集合中的_id.那么$list就是臨時集合中的list,以_id為首把這些零散的list給組合成一個新的數組就是聚合.$push是添加一個對象,當然也有更簡單的方式
{ "$group":{ "_id":"$_id", "results":{ "$push":"$list" } } }
這樣就直接把整個list對象給push到一個數組中.那么這樣查詢最終返回的結果就是我們想要的結果了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18837.html
摘要:什么是類似于拆分結果然后對結果進行分析求值然后再返回新結果文檔聚合官方運用篇個人總結案例一案例二案例三案例那么有什么作用呢舉個例子文檔中有如下幾個集合集合一集合二集合三我們想篩選出中為的集合理所當然我們會這樣寫當然這樣寫是能拿到結 什么是aggregate aggregate類似于pipe.拆分結果然后對結果進行分析求值然后再返回新結果.. 文檔 MongoDB聚合官方APIMongo...
摘要:將返回結果限制為前個。所以,聚合的結果必須要限制在以內支持的最大響應消息大小。包含字段和排除字段的規則與常規查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數據存儲在Mon...
摘要:將返回結果限制為前個。所以,聚合的結果必須要限制在以內支持的最大響應消息大小。包含字段和排除字段的規則與常規查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數據存儲在Mon...
摘要:當在中使用時,累加器是針對每個分組使用的當在中使用時,累加器則是針對每個字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達式操作符組成的表達式或者在或中使用累加器能查詢統計的內容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細說一下管道操作符。 mongoDB查詢進階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
摘要:當在中使用時,累加器是針對每個分組使用的當在中使用時,累加器則是針對每個字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達式操作符組成的表達式或者在或中使用累加器能查詢統計的內容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細說一下管道操作符。 mongoDB查詢進階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
閱讀 1810·2021-08-13 15:06
閱讀 3100·2021-08-05 10:02
閱讀 3365·2019-08-30 15:55
閱讀 2378·2019-08-30 13:46
閱讀 2485·2019-08-30 13:01
閱讀 1323·2019-08-29 17:17
閱讀 2824·2019-08-29 15:27
閱讀 1431·2019-08-29 11:12