學習筆記之MongoDB進階(一)
阿新 • • 發佈:2018-12-23
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為型別 2 的String型別的資料
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 }