標籤:mongodb 集合架構
題記:
還有3天2014年結束了,這個月的計劃除了總結Mongodb外其他計劃都已經完成了。最近由於懶惰對於mongodb的研究暫停了好長時間。在最後的三天裡,對於mongodb的研究做以總結和梳理;
一、基本概念
對於彙總架構,我在官方文檔(http://docs.mongodb.org/manual/core/aggregation-introduction/)找到對它的介紹。翻譯大概意思如下:
彙總是處理資料記錄並且返回計算結果的操作。mongodb提供了一組強大針對資料集合進行檢查和計算的彙總操作。在mongod執行個體中運行資料彙總可以簡化應用程式代碼,約束資源需求;和查詢一樣,在mongodb中彙總操作把文檔的集合作為輸入參數,以一個或者多個文檔的形式返回結果。
在mongodb中使用彙總架構可以對集合中的文檔進行變換和組合。基本上用多個構建建立一個管道(pipeline),用於對一連串的文檔進行處理。這些構建包含篩選(filtering),投射(projecting),分組(grouping),排序(sorting),限制(limiting)和跳過(skipping).
以下是官方文檔中的執行個體圖:
二、基本操作符
比如有一個儲存雜誌文章的集合。你可能希望找出發表文章最多哪個作者、 假設每篇文章中被儲存為MongoDB的一個文檔,可以按照如下步驟建立管道。
1. 將每個文章文檔中的作者投射出來
2. 將作者按照名字排序,統計每個名字出現的次數
3. 將作者按照名字出現的次數降序排列
4. 將返回結果限制為前五個
對於操作符號執行個體:
1. {‘$project’:{‘auther‘:1}} 這樣可以把‘author’從每個文檔中投射出來;執行結果後該文檔會存在{‘id’:id,‘author‘:author}
2. {‘$group‘:{‘Id:‘‘$author‘,‘count‘:{‘$sum‘:1}}} 這樣就會將作者按照名字排序,某個作者名字每出現一次,就會對每個作者的count加一。
執行該步驟後,結果集合中的每個文檔就是這樣的結構:{"_id": "authorName","count": articleCount}
3. {"$sort": {"count":-1}} 這個操作會對結果集合中的文檔根據“count”欄位進行降序排列
4. {"$limit":5} 這個結果的顯示為當前結果的前五個文檔。
其他的操符號:http://docs.mongodb.org/manual/reference/operator/aggregation-pipeline
【MongoDB】MongoDB之彙總架構(一)