MongDB基礎學習(五)——投影,分頁,排序,彙總,mongdb分頁

來源:互聯網
上載者:User

MongDB基礎學習(五)——投影,分頁,排序,彙總,mongdb分頁

MongDB基礎學習(五)——投影,分頁,排序,彙總

基礎文法的學習

        馬上就要過年啦,明天也是情人,後天就要放假啦,希望自己能夠在放假前把五和六的章節寫完。很高興的一點,昨天看到我寫的“【MongoDB for Java】Java操作MongoDB”能夠被放到CSDN部落格的首頁的頭條,本章節的學習內容如下:

(1)    MongoDB的投影的文法和樣本學習

(2)    MongoDB的Limit()和Skip()方法學習,從而達到分頁的效果

(3)    MongoDB的sort() 方法學習

(4)    MongoDB的彙總方法學習,主要用於返回資料記錄和計算結果

5.1 MongoDB的投影

       mongodb 投影意思是只查詢必要的資料而不是查詢一個檔案的全部資料。如果一個文檔有5個欄位,需要顯示只有3個,然後選擇其中只有3個欄位。

(1)    find() 方法

        MongoDB 的find()方法,在MongoDB查詢文檔解釋接受第二個選擇性參數是要檢索的欄位列表。在MongoDB中,當執行find()方法,那麼它會顯示一個文檔所有欄位。要限制這一點,需要設定的欄位列表值1或0。 1用來顯示欄位而0是用來隱藏欄位。

(2)    文法

          find()方法具有投影基本文法如下:db.COLLECTION_NAME.find({},{KEY:1})

(3)    樣本

> db.web_app.find()

{ "_id" :ObjectId("54d877e4ebde50baebb6c4c8"), "name" : "追夢客", "oldName" :"好童話", "description" : "這是一個VR旅遊電子商務網站" }

{ "_id" :ObjectId("54d87cdfebde50baebb6c4c9"), "name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

{ "_id" :ObjectId("54d87cdfebde50baebb6c4ca"), "city" : "西安", "address" :"www.dreamerkr.com.cn" }

> db.web_app.find({},{"_id":0,"name":1})

{ "name" : "追夢客" }

{ "name" : "好童話" }

            { }

         可以看到,這裡只顯示我們需要查詢的欄位。這個在開發API介面的經常會用到,我們只想外面暴露部分資料,可以加強資料安全性。

5.2 MongoDB的分頁

        MongoDB的分頁主要用到Limit()和Skip()方法,它們基本的操作如下:

(1)    Limit() 方法

         要限制 MongoDB 中的記錄,需要使用 limit() 方法。 limit() 方法接受一個數字型的參數,這是要顯示的文檔數(這個Mysql的limit的是有區別的,大家學習的時候,可以進行比較學習,想一下mysql或者其他資料庫操作,MongoDB裡是怎麼完成,自我感覺這樣加深學習)。

(2)    文法:

         limit() 方法的基本文法如下:db.COLLECTION_NAME.find().limit(NUMBER)

(3)    樣本

>db.web_app.find()

{ "_id" :ObjectId("54d877e4ebde50baebb6c4c8"), "name" : "追夢客", "oldName" :"好童話", "description" : "這是一個VR旅遊電子商務網站" }

{ "_id" :ObjectId("54d87cdfebde50baebb6c4c9"), "name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

{ "_id" : ObjectId("54d87cdfebde50baebb6c4ca"),"city" : "西安", "address" : "www.dreamerkr.com.cn" }

> db.web_app.find().limit(2)

{ "_id" :ObjectId("54d877e4ebde50baebb6c4c8"), "name" : "追夢客", "oldName" :"好童話", "description" : "這是一個VR旅遊電子商務網站" }

{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

(4)    Skip()方法

方法skip() 也接受數字類型的參數,並使用跳過的文檔數。例如skip(5),意思就是跳過前五條資料,顯示後面的資料。請注意,預設值skip()方法是0,也就是說我們可以調用skip不傳參數,MongoDB會給一個預設參數0.

5)    文法

skip()方法基本文法如下: db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

(6)    樣本

> db.web_app.find()

{ "_id" :ObjectId("54d877e4ebde50baebb6c4c8"), "name" : "追夢客", "oldName" :"好童話", "description" : "這是一個VR旅遊電子商務網站" }

{ "_id" :ObjectId("54d87cdfebde50baebb6c4c9"), "name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

{ "_id" :ObjectId("54d87cdfebde50baebb6c4ca"), "city" : "西安", "address" :"www.dreamerkr.com.cn" }

> db.web_app.find().limit(2).skip(2)

{ "_id" :ObjectId("54d87cdfebde50baebb6c4ca"), "city" : "西安", "address" :"www.dreamerkr.com.cn" }

     這裡就是MongoDB的分頁操作,頁面顯示兩條資料,就像mysql的{begNum}, {endNum},這裡換成啦db.web_app.find().limit(endNum-begNum).skip(begNum)意思就從第幾行開始讀取N記錄。

5.3 MongoDB的排序

(1) sort() 方法

       要在 MongoDB 中的文檔進行排序,需要使用sort()方法。 sort() 方法接受一個文檔,其中包含的欄位列表連同他們的排序次序。要指定排序次序1和-1。 1用於升序排列,而-1用於降序。

(2) 文法

        sort() 方法的基本文法如下:db.COLLECTION_NAME.find().sort({KEY:1})

(3)    樣本

         如果不指定排序優先,然後sort() 方法將文檔顯示在升序排列

> db.web_app.find()

{ "_id" : ObjectId("54d877e4ebde50baebb6c4c8"),"name" : "追夢客", "oldName" : "好童話","description" : "這是一個VR旅遊電子商務網站" }

{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

{ "_id" : ObjectId("54d87cdfebde50baebb6c4ca"),"city" : "西安", "address" : "www.dreamerkr.com.cn" }

> db.web_app.find().sort({"name":1})

{ "_id" : ObjectId("54d87cdfebde50baebb6c4ca"), "city": "西安","address" : "www.dreamerkr.com.cn" }

{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童話", "des" : "這是一個o2o的vr旅遊平台" }

{ "_id" : ObjectId("54d877e4ebde50baebb6c4c8"),"name" : "追夢客", "oldName" : "好童話","description" : "這是一個VR旅遊電子商務網

5.4 MongoDB的彙總

       彙總操作過程中的資料記錄和計算結果返回。彙總操作分組值從多個文檔,並可以執行各種操作,分組資料返回單個結果。在SQL COUNT(*)和groupby 相當於MongoDB的聚集。

(1)    aggregate() 方法

         對於在MongoDB中聚集,應該使用aggregate()方法。

(2)    文法

        aggregate()方法的基本文法如下:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

(3)    樣本

> db.web_info.find()

{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童話", "address" : "這是一個o2o的vr旅遊平台" }

{ "_id" :ObjectId("54db2e0fc50ae3624c1a555c"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" :ObjectId("54db2e2ac50a6a0d0c6a8c98"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" :ObjectId("54db2e36c50a607e6eb3d548"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" :ObjectId("54db2e6bc50a5f841ad5c196"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" : ObjectId("54db2e6bc50a5f841ad5c197"),"name" : "tom" }

{ "_id" :ObjectId("54db2ebdc50a86203da25e72"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" :ObjectId("54db2ebdc50a86203da25e73"), "name" : "雨打排行" }

{ "_id" :ObjectId("54db2ef5c50a536eb77a3d6d"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" :ObjectId("54db2ef5c50a536eb77a3d6e"), "name" : "雨打排行" }

{ "_id" :ObjectId("54dc0687c50acb624c30dfcb"), "name" : "追夢客", "address" :"http://www.dreamerkr.com" }

{ "_id" : ObjectId("54dc0808c50a5945720b1723"),"name" : "追夢客", "address" : "http://www.dreamerkr.com" }

{ "_id" :ObjectId("54dc0808c50a5945720b1724"), "name" : "雨打排行2" }

{ "_id" :ObjectId("54dc09adc50ac37356e0f1a9"), "name" : "追夢客" }

{ "_id" :ObjectId("54dc0a4ac50a4fac80213257"), "name" : "追夢客" }

{ "_id" :ObjectId("54dc0a8cc50ad7af35250807"), "name" : "追夢客2" }

{ "_id" :ObjectId("54dc0ac4c50adf3258a884bf"), "name" : "追夢客2" }

{ "_id" :ObjectId("54dc0baec50ad2416bac179b"), "name" : "追夢客" }

{ "_id" :ObjectId("54dc0cc3c50afa2987800afe"), "name" : "追夢客" }

{"_id" : ObjectId("54dc130fc50a1c2e75e2b05c"),"name" : "追夢客", "address" : "http://www.dreamerkr.com" }

> db.web_info.aggregate([{$group: {_id : "$name", num : {$sum : 1}}}])

{ "_id" : null,"num" : 2 }

{ "_id" : "雨打排行2", "num" : 1 }

{ "_id" : "雨打排行", "num" : 3 }

{ "_id" :"tom", "num" : 1 }

{ "_id" : "追夢客", "num" : 13 }

{ "_id" : "追夢客2", "num" : 2 }

{ "_id" : "好童話", "num" : 3 }

       上述使用的情況相當於SQL查詢 select name, count(*) from web_info group by name。在上面的例子中,我們已分組欄位name 文檔,並在每個的次數name先前的值總和遞增。其他聚集運算式列表如下:

運算式

描述

執行個體

$sum

總結從集合中的所有檔案所定義的值.

db.web_info.aggregate([{$group : {_id : "$name", num : {$sum : "$address"}}}])

$avg

從所有文檔集合中所有給定值計算的平均.

db.web_info.aggregate([{$group : {_id : "$name", num : {$avg : "$address"}}}])

$min

擷取集合中的所有檔案中的相應值最小.

db.web_info.aggregate([{$group : {_id : "$name", num : {$min : "$address"}}}])

$max

擷取集合中的所有檔案中的相應值的最大.

db.web_info.aggregate([{$group : {_id : "$name", num : {$max : "$address"}}}])

$push

值插入到一個數組產生文檔中.

db.web_info.aggregate([{$group : {_id : "$name", address : {$push: "$address"}}}])

$addToSet

值插入到一個數組中所得到的文檔,但不會建立重複.

db.web_info.aggregate([{$group : {_id : "$name", address : {$addToSet : "$address"}}}])

$first

根據分組從來源文件中擷取的第一個文檔。通常情況下,這才有意義,連同以前的一些應用 “$sort”-stage.

db.web_info.aggregate([{$group : {_id : "$name", first_address : {$first : "$address"}}}])

$last

根據分組從來源文件中擷取最後的文檔。通常,這才有意義,連同以前的一些應用 “$sort”-stage.

db.web_info.aggregate([{$group : {_id : "$name", last_address : {$last : "$address"}}}])

 

相關文章

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.