MongoDB基础使用
5.MongoDB基礎使用
5.1.常用的命令(重點)
> Help 查看幫助
顯示數據庫列表 > show dbs
創建數據庫 > use dbname
如果數據庫不存在,則創建數據庫dbname,否則切換到指定數據庫dbname。創建的數據庫并不在數據庫的列表中,要顯示它,我們需要向數據庫dbname插入一些數據
MongoDB 中默認的數據庫為 test,如果你沒有創建新的數據庫,集合將存放在 test 數據庫中。
顯示數據庫中的集合 show collections
5.1.1.增加數據(重點中的重點)
db.web.save({"name":"老李"}) 創建了名為web的集合,并新增了一條{“name”:“老李”} 的數據
db.web.insert({"name":"ghost", "age":10}) 在web集合中插入一條新數據,如果沒有web這個集合,mongodb會自動創建
save()和insert()也存在著些許區別:若新增的數據主鍵已經存在,insert()會不做操作并提示錯誤,而save() 則更改原來的內容為新內容。
_id是主鍵,主鍵是每條數據的唯一標識,不能重復,就像身份證是每個人唯一的編號一樣。
存在數據:{ _id : ObjectId(“57e8d34b4764fb71d0a89caa”), " name " : " 老李"} ,_id是主鍵
insert({ _id : ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王 " }) 會提示錯誤
save(ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王 " }) 會把 “老李” 改為 “ 老王” ,有update的作用。
5.1.2.刪除數據(重點中的重點)
1、刪除文檔
2、刪除集合
3、刪除數據庫
db.users.remove({}) 刪除users集合下所有數據
db.users.remove({"name": "lecaf"}) 刪除users集合下name=”lecaf”的數據
db.users.drop()或db.runCommand({"drop":"users"}) 刪除集合users
db.runCommand({"dropDatabase": 1}) 刪除當前數據庫,注意 此處的1沒加雙引號。
5.1.3.查找數據(重點中的重點)
db.users.find() 查找users集合中所有數據
db.users.findOne() 查找users集合中的第一條數據
db.users.find().pretty() 格式化查詢到的數據
5.1.4.修改數據(重點中的重點)
db.web.update({"name":"a1"}, {"age":10}) 修改name=a1的數據為sex=1,第一個參數是查找條件,第二個參數是修改內容,主鍵不能修改,如圖
5.2.MongoDB高級命令(重點)
5.2.1.條件查找
學習用命令的意義在于:我們做系統的時候,后端人員需要給前端開發人員提供數據,如果后端人員用可視化工具,只是他自己眼睛能看到,但是如果要把這些數據提供給前端,他需要用代碼去查數據庫,把查詢的結果返回給前端。
為此:老師給大家整理了下以下這些常見的查詢例子,如果你以后忘記了,就翻出來看看。
提前做了一個歌手的json數據,我們可以把他導入到數據庫,練習查找命令。
語法1:db.collection.find({ "key" : value }) 查找key=value的數據.
例1:查找女歌星。
思路:查找sex=”女”的歌星。
具體命令:
語法2: db.collection.find({ "key" : { $gt: value } }) key > value
例2:查找年齡大于53的歌星。
語法3:db.collection.find({ "key" : { $lt: value } }) key < value
例3:查詢年齡小于35歲的歌星。
語法4:db.collection.find({ "key" : { $gte: value } }) key >= value
例4:查詢成績大于等于95的歌星。
語法5:db.collection.find({ "key" : { $lte: value } }) key <= value
例5:查詢年齡在小于等于32歲的歌星。
語法6:db.collection.find({ "key" : { $gt: value1 , $lt: value2 } }) value1 < key <value2
例6:查找年齡在30-40歲之間的歌星。
語法7:db.collection.find({ "key" : { $ne: value } }) key <> value
例7:查詢外國歌手。
分析:條件為 country不等于”中國”
語法8:db.collection.find({ "key" : { $mod : [ 10 , 1 ] } }) 取模運算,條件相當于key % 10 == 1 即key除以10余數為1的
例8:查詢成績為5 、15、25、。。。。95的歌星。
語法9:db.collection.find({ "key" : { $in: [ 1, 2, 3 ] } }) 屬于,條件相當于key等于[ 1, 2, 3 ]中任何一個.
例9:查詢序號(num)為3或者6或者9的歌星。
語法10:db.collection.find({ "key" : { $nin: [ 1, 2, 3 ] } }) 不屬于,條件相當于key的值不屬于[ 1, 2, 3 ]中任何一個。
例10:查詢國籍不為美國和韓國的歌手。
語法11:db.collection.find({ "key" : { $size: 1 } }) $size 數量、尺寸,條件相當于key對應的值的數量是1(值必須是數組)
這個有點難理解,通過例子理解容易些:
每個歌星都有代表作,并且代表作是數組。
例11:查詢有3個代表作品的歌手。
語法12:db.collection.find({ "key" : { $exists : true|false } })
$exists 字段存在,true返回存在字段key的數據,false返回不存在字段key的數據
例12-1:查詢包含tel字段的數據。
之前的數據字段都是一樣的,此時插入一條數據{“name”:“test”,“tel”:“15388889999”}
然后查詢:
例12-2 :查詢不包含tel字段的數據
語法13:db.collection.find({ $or : [{a : 1}, {b : 2} ] })
符合兩個條件中任意一個的數據。$or語法表示或的意思。 (注意:MongoDB 1.5.3后版本可用),符合條件a=1的或者符合條件b=2的數據都會查詢出來。
例13:某個娛樂公司15個人,資料都在數據庫里面,某個活動必須要劉德華參加,另外需要團隊的全部女歌手配合演出,領導安排你幫忙打印歌手的資料。
db.collection.find({ "key.subkey" :value }) 內嵌對象中的值匹配,注意:"key.subkey"必須加引號。
例14:插入一條測試數據
此數據的score對應的值是一個對象。
例14:查詢語文成績為80的同學。
5.2.2.排序
db.collection.find().sort({ "key1" : -1 ,"key2" : 1 }) 這里的1代表升序,-1代表降序
例1:對所有歌星安年齡排序。
例2:對所有歌星先按年齡降序排列,再按score字段降序排列。
5.2.3.索引
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。
索引是特殊的數據結構,索引存儲在一個易于遍歷讀取的數據集合中,索引是對數據庫表中一列或多列的值進行排序的一種結構
例如:我們查詢張三的時候 db.singer.find({“name”:“張三”})
如果沒有對name 字段建立索引,數據庫在查詢的時候會掃描所有的數據,如果數據量小的時候,感覺不出來速度慢,當數據越來越多的時候,就會越來越慢。
這個時候如果給name 建立一個索引,查詢速度就會加快。
MongoDB使用 ensureIndex() 方法來創建索引。
ensureIndex()方法基本語法格式如下所示:
db.COLLECTION_NAME.ensureIndex({KEY:1})
對name 字段建立一個索引如下:
可視化工具里面可以看到剛創建的索引:
語法中 Key 值為你要創建的索引字段,1為指定按升序創建索引,如果你想按降序來創建索引指定為-1即可。
實例
>db.col.ensureIndex({"title":1})> ensureIndex() 方法中你也可以設置使用多個字段創建索引(關系型數據庫中稱作復合索引)。> db.col.ensureIndex({"title":1,"description":-1}) 5.2.4.其他 db.collection.find().limit(5) 控制返回結果數量,如果參數是0,則沒有約束,limit()將不起作用db.collection.find().skip(5) 控制返回結果跳過多少數量,如果參數是0,則當作沒有約束,skip()將不起作用,或者說跳過了0條
db.collection.find().skip(5).limit(5) 可用來做分頁,跳過5條數據再取5條數據
db.collection.find().count() count()返回結果集的條數
db.collection.find().skip(5).limit(5).count(true) 在加入skip()和limit()這兩個操作時,要獲得實際返回的結果數,需要一個參數true,否則返回的是符合查詢條件的結果總數
模糊查詢:
db.collection.find({"name":/ab/}) //newsModel.find({"title":/ab/}) //newsModel.find({"title":new RegExp(變量關鍵詞))以上是常見的查詢,如果工作中遇到更加復雜的需求,可以通過查文檔來解決。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MongoDB基础使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sass笔记(CSS 的预编译语言)
- 下一篇: django-uwsgi配置