[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

下載地址: GitHub:https://github.com/magicdict/MagicmongodbTool 在開始介紹這節之前,我來說說我開發這個工具的意義。 我不敢保證以后MongoDB可以大紅大紫,也無法保證MongoDB以后會分享很多很多市場份額。 現在開發這個東西,一年后可能Mongo倒閉了,這

??? 下載地址:

???? GitHub:??https://github.com/magicdict/MagicMongoDBTool

???? 在開始介紹這節之前,我來說說我開發這個工具的意義。

???? 我不敢保證以后MongoDB可以大紅大紫,也無法保證MongoDB以后會分享很多很多市場份額。

???? 現在開發這個東西,一年后可能Mongo倒閉了,這個工具就是一個垃圾。一年后,Mongo修成正果,香港服務器,這個工具就是香餑餑。

???? 等所有人都覺得這個東西會火,你才去關注,開發工具,就晚了?;c業余時間,開發Mongo工具的同時,香港服務器租用,最主要去學習一下大數據的一些思想,例如副本,分片概念。

???? 還有就是階層數據庫的一些實現的方法。當然,由于3年前才開始從VB.NET轉C#的,也希望通過多些編碼將C#用身體記住。

[aggregation Framework]

例子1

aggregation Framework 是MongoDB的一個功能強大的統計框架,這里就演示一下這個框架的使用方法。

首先,我們新建一個aggregation數據集。然后再按照官方文檔的樣子,使用MongoCola插入一個文檔。(將下面這段JSON直接粘貼到新建文檔的窗體里面就可以了)

{ title : “this is my title” , author : “bob” , posted : new Date() , pageViews : 5 , tags : [ “fun” , “good” , “fun” ] , comments : [ { author :“joe” , text : “this is cool” } , { author :“sam” , text : “this is bad” } ], other : { foo : 5 } }

?

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

1.$project

這個操作符號,可以用來做Select 的操作。用來指定顯示的列。

{ $project : { title : 1 , author : 1 }}

這里表示我們只是需要title和author列的信息。

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

這里的參數1:表示 0:非表示。 _id是一個默認的表示項目,我們可以通過將_id設置為0,告訴系統不表示這個項目。

{ $project : { _id : 0 , title : 1 , author : 1 }}

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

當然,你也可以新建一個字段,例如一個doctoredPageViews字段,這個字段是在原有字段的基礎上加工而成的值。

就如 SQL中的,Select (pageViews + 10 As doctoredPageViews) from table

{ $project : { title : 1, doctoredPageViews : { $add:[“$pageViews”, 10] } }}

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

?當然你也可以重新命名列名

{ $project : { title : 1 , page_views : “$pageViews” , bar : “$other.foo” }}

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

最后你也可以通過Project操作符,來構建你想要的文檔結果。下面這個例子里面的Status就是一個新建的子文檔

{ $project : { title : 1 , stats : { pv : “$pageViews”, foo : “$other.foo”, dpv : { $add:[“$pageViews”, 10] } } }}

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

2$match這個操作符號,有點類似于Select文的Where條件。例如我們想尋找author是bob的記錄:

{ $match : { author : “bob” } }

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

這個Aggregate框架里面的各種操作符號是可以任意組合的。我們可以既有match操作,又有project操作。

這里我們用工具將兩種操作的條件分別加上。

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

注意:這里我們已經添加了2個條件了。第一個是match,第二個是project。

?

例子2

下面是例子的測試數據

{ “_id” : “1”, “User” : “Tom”, “Country” : “Finland”, “Count” : 1 } { “_id” : “2”, “User” : “Tom”, “Country” : “Finland”, “Count” : 3 } { “_id” : “3”, “User” : “Tom”, “Country” : “Finland”, “Count” : 2 } { “_id” : “4”, “User” : “Mary”, “Country” : “Sweden”, “Count” : 1 } { “_id” : “5”, “User” : “Mary”, “Country” : “Sweden”, “Count” : 7 }

?

我們找一下是User是Tom,Count >= 2 的記錄

{ $match : { User: “Tom”, Count:{“$gte”: 2} } }

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

4

關于操作符號:?

3 $Group

我們對于User進行Group操作,并且對于Count進行合計

注意,這里必須要有一個_id字段來表示Group的條件

{ $group : { _id : { “MyUser”: “$User” } TotalCount : { $sum : “$Count” } } }

[教程]MongoDB 從入門到進階 (aggregation數據庫狀態)

結果就是Mary的合計值是8,Tom則是6.

MyUser SUM(Count) AS TotalCount

?

我們再次添加一條記錄

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享