1. 程式人生 > >學習筆記之MongoDB進階(一)

學習筆記之MongoDB進階(一)

MongoDB的條件操作符

MongoDB中條件操作符有:

(>) 大於 - $gt
(<) 小於 - $lt
(>=) 大於等於 - $gte
(<= ) 小於等於 - $lte

$gt -------- greater than  >
$gte --------- gt equal  >=
$lt -------- less than  <
$lte --------- lt equal  <=
$ne ----------- not equal  !=
$eq  --------  equal
插入資料:
db.col.insert({title: 'MongoDB 進階'
, des: 'MongoDB的運算子號', by: 'youns', url: 'http://www.col.com', likes: 100 }) db.col.insert({title: 'MongoDB 進階', des: 'MongoDB的運算子號', by: 'youns', url: 'http://www.col.com', likes: 200 }) db.col.insert({title: 'MongoDB 進階', des: 'MongoDB的運算子號', by: 'youns', url: 'http://www.col.com'
, likes: 300 }) #####大於($gt)使用語法: db.col.find({"likes" : {$gt : 100}}) 使用結果: { "_id" : ObjectId("5a387ccde9ba01b2b3d3d946"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 200 } { "_id" : ObjectId("5a387cd2e9ba01b2b3d3d947"), "title" : "MongoDB 進階"
, "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 300 } 其他三種用法參考大於的用法

介紹大於和小於聯合使用用法

若想獲取likes大於100,且小於300的資料,則可以參考以下用法:

db.col.find({likes:{$gt:100,$lt:300}})

使用結果:
{ "_id" : ObjectId("5a387ccde9ba01b2b3d3d946"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 200 }

型別符$type

Double  1   
String  2   
Object  3   
Array   4   
Binary data 5   
Undefined   6   已廢棄。
Object id   7   
Boolean 8   
Date    9   
Null    10  
Regular Expression  11  
JavaScript  13  
Symbol  14  
JavaScript (with scope) 15  
32-bit integer  16  
Timestamp   17  
64-bit integer  18  
Min key 255 Query with -1.
Max key 127 

使用方法:
取title為型別 2String型別的資料
db.col.find({"title" : {$type : 2}})
Limit/Skip/Sort用法

Limit:指定讀取幾條記錄
基礎用法:
db.col.find().limit(NUMBER)

Skip:指定忽略多少條資料之後,再顯示資料
基礎用法:
db.col.find().limit(NUMBER).skip(NUMBER)

用例:
顯示一條資料:
> db.col.find().limit(1)
{ "_id" : ObjectId("5a387cc4e9ba01b2b3d3d945"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 100 }

顯示一條資料,但要先跳過一條資料
> db.col.find().limit(1).skip(1)
{ "_id" : ObjectId("5a387ccde9ba01b2b3d3d946"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 200 }
是
對比來看倆次的結果,可加深對skip理解:一般來說對於需同時使用limit和skip的情況建議將skip寫在前面,如下:
>db.col.find().skip().limit()

而根據官方的Api來看:Skip和limit聯合使用,只適合小資料量的查詢,當資料量較龐大時不太適合

Sort:用來排序,指定順序還是倒序
基礎語法:

>db.col.find().sort({KEY:1})
key:1,依據key值進行正序輸出
key:-1,依據key值進行倒序輸出

//倒序顯示likes大於23的資料
>db.col.find({likes:{$gt:23}}).sort({"likes":-1})
結果:
{ "_id" : ObjectId("5a387cd2e9ba01b2b3d3d947"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 300 }
{ "_id" : ObjectId("5a387ccde9ba01b2b3d3d946"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 200 }
{ "_id" : ObjectId("5a387cc4e9ba01b2b3d3d945"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 100 }

//在前一基礎上,選擇所顯示的資料,如下:
>db.col.find({likes:{$gt:23}},
{"title":1,likes:1}).sort({"likes":-1})

{ "_id" : ObjectId("5a387cd2e9ba01b2b3d3d947"), "title" : "MongoDB 進階", "likes" : 300 }
{ "_id" : ObjectId("5a387ccde9ba01b2b3d3d946"), "title" : "MongoDB 進階", "likes" : 200 }
{ "_id" : ObjectId("5a387cc4e9ba01b2b3d3d945"), "title" : "MongoDB 進階", "likes" : 100 }

> db.col.find({likes:{$gt:23}},        {"title":1,_id:0}).sort({"likes":-1})

{ "title" : "MongoDB 進階" }
{ "title" : "MongoDB 進階" }
{ "title" : "MongoDB 進階" }
對比結果我們可以看到:_id是預設顯示的,而若想讓某一欄位資料顯示可設定為1,不顯示為0

以上就是查詢和排序的總結,整理以上,我們來寫一個相對複雜的語句

//查詢集合內資料
>db.col.find()
{ "_id" : ObjectId("5a387cd2e9ba01b2b3d3d947"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 300 }
{ "_id" : ObjectId("5a388562e9ba01b2b3d3d948"), "title" : { "$type" : 2 } }
{ "_id" : ObjectId("5a38a94de9ba01b2b3d3d949"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 100 }
{ "_id" : ObjectId("5a38a960e9ba01b2b3d3d94a"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 50 }
{ "_id" : ObjectId("5a38a98de9ba01b2b3d3d94b"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 99 }
{ "_id" : ObjectId("5a38aac2e9ba01b2b3d3d94c"), "title" : "MongoDB 進階", "des" : "MongoDB的運算子號", "by" : "youns", "url" : "http://www.col.com", "likes" : 200 }

//查詢likes小於300,省略一條資料,顯示倆條資料,隱藏_id,顯示title和likes
>db.col.find({likes:{$lt:300}},{title:1,_id:0,likes:1}).sort({likes:-1}).skip(1).limit(2)
結果:
{ "title" : "MongoDB 進階", "likes" : 100 }
{ "title" : "MongoDB 進階", "likes" : 99 }
以上就是此次的學習記錄,只是我以自己的方式進行的一個歸納總結,若有不足望提出,會及時改正。