MongoDB的彙總函式 Aggregate__函數

來源:互聯網
上載者:User

Aggregate的使用,有利於我們對MongoDB中的集合進行進一步的拆分。

樣本:

db.collection.aggregate(    {$match:{x:1},    {limit:10},    {$group:{_id:"$age"}}});

 操作符介紹: 

$project:包含、排除、重新命名和顯示欄位

$match:查詢,需要同find()一樣的參數

$limit:限制結果數量

$skip:忽略結果的數量

$sort:按照給定的欄位排序結果

$group:按照給定運算式組合結果

$unwind:分割嵌入數組到自己頂層檔案

============================================================

這是MongoDB官網上的一個Data Model:

{  "_id": "10280",//zipcode  "city": "NEW YORK",//城市  "state": "NY",//城市縮寫  "pop": 5574,//人口  "loc": [ //經緯度    -74.016323,    40.710537  ]}



1、查出一個超過1千萬人口的城市

db.zipcodes.aggregate(    {$group:{_id:"$state", totalPop:{$sum:"$pop"}},    {$match:{totalPop:{$get:10000000}}});


上面的語句相當於: SELECT  state, sum(pop)  totalPop from zipcodes group by state having by totalPop >= 10000000;

分析:

$group主要是用於分組,其中_id是用組的類型集合,totalPop是產生的一個新的欄位,用於儲存總數。

其實,document經過$group之後,系統會為其產生一個新的document(新的documment為{"_id":"AK","totalPop":550043}),這在下面的例子中,我們會看得更清楚。

$match,相當於為新產生的document提供查詢功能

2、求平均人口,每個state


db.zipcodes.aggregate( { $group :                         { _id : { state : "$state", city : "$city" },                           pop : { $sum : "$pop" } } },                       { $group :                       { _id : "$_id.state",                         avgCityPop : { $avg : "$pop" } } } )


上述樣本中出現了兩個$group,那是什麼含義呢。

第一個$group是將原來的zipcodes 這個 document變成新的,如:


{  "_id" : {    "state" : "CO",    "city" : "EDGEWATER"  },  "pop" : 13154}


第二個 $group是在,原有的基礎之上,再進行一次重新格式化資料,再產生新的document,如:


{  "_id" : "MN",  "avgCityPop" : 5335},

3、查詢每個州人口最大和最小的城市


db.zipcodes.aggregate({$group:{_id:{state:"$state",city:"$city"}, totalPop:{$sum:"$pop"}}},//統計州的所有人,產生一個新的文檔,是關於州與其總人口{$sort:{"totalPop":-1}},//對新文檔,根據人口數倒序排序{$group:{_id:"$_id.state","biggestCity":{$first:"$_id.city"},//最大人口的城市"biggestPop":{$first:"totalPop"},//最大人口的數量"smallestCity":{$last:"$_id.city"},"smallestPop":{$last:"totalPop"}}},//重新組成一個新的檔案,包含,州名,最大人口數和最小人口數//本來結構到此基本上差不多了//但我們需要再對資料進行格式化{$project:{_id:0,state:"$_id",biggestCity:{name:"$biggestCity",pop:"$biggestPop"},smallestCity:{name:"$smallestCity",pop:"$smallestPop"}}});


資料結構,如下:

{  "state" : "RI",  "biggestCity" : {    "name" : "CRANSTON",    "pop" : 176404  },  "smallestCity" : {    "name" : "CLAYVILLE",    "pop" : 45  }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.