四十九、MongoDB資料庫1:MongoDB的增、刪、改、查
一、連線資料庫
如果只在windows下使用:進入資料庫命令:mongo
如果windows要連線虛擬機器(伺服器),命令:mongo 伺服器IP地址:27017
Mongodb ‘無狀態模式’,不用去設計,直接用,存什麼東西,取決於前邊傳什麼,後邊就存什麼。
二、資料庫相關操作
1、獲取當前你正在使用的資料庫:db.getName() 或是db
2、檢視已有的資料庫(顯示所有的資料庫):show dbs 或 show databases
3、選擇資料庫:use 庫名
注意:use了一個不存在的資料庫,會自動的進行建立該資料庫,下面例子中:xk是不存在的庫名,goods是集合名,
可自己直接寫,進行建立,這樣資料庫和集合都建立完畢:
如果不對該資料庫進行任何的操作,該資料庫不會建立成功。
4、刪除資料庫:(必須先選擇資料庫,再刪除)
5、檢視資料庫狀態:db.stats() ---選擇資料庫,再檢視
6、檢視資料庫相關幫助資訊
三、集合的操作
1、檢視當前資料庫已有的集合 show tables; 或show collections;
2、集合的建立:
注意:如果use了一個不存在的資料庫,依舊可以在裡面建立集合。
system.indexes是系統自帶的。
3、集合的刪除
如果刪除一個不存在的集合,則返回false。
4、建立集合,插入文件
① 注意:可以use一個不存在的資料庫,然後,直接使用db.集合名.insert()語句進行插入資料資訊。
② 也可以下面這樣一步一步的來:(字典形式) 用 find 查詢內容
說明:插入記錄成功以後,mongodb會預設為每一個文件都新增一個_id的欄位,並且同一集合中的_id是唯一的。
5、檢視集合裡的具體資料:
db.集合名.find()
下面這種查出來美觀:
6、集合的命名:
① 不能是空字串(“ ”)
② 不能包含\0字元(空字元)
③ 不能使用system.的字首(系統保留)
④ 建議不包含保留字 ”$”
⑤ 用.分割不同名稱空間的子集合(如:blog.users, blog.posts)
四、寫入資料 ” ”記住都寫上,省著分寫上還是不寫
內容裡必須都加上({ })
1、普通資料的新增
Json格式 Bson格式,類json格式
①插入多條資料
一條一條的這種形式多次插入資料:
這種插入資料,鍵可寫“”,也可不寫“”最好都寫上
一次性插入多條資料:
語法格式:db.goods.insert([{},{},{}.......]) 鍵值都加“”號
2、多維資料物件新增:db.goods.insert({{} }) {}裡巢狀{ }
3、 陣列資訊的新增db.goods.insert({{} ,[ ] })
五、儲存資料(修改資料)
語法:db.集合名稱.save(文件)
特點:_id如果資料不存在則新增,如果資料存在則修改。(_id不寫,也會預設新增,如果修改必須加_id)
如果在儲存資料的時候,所指定的id是存在的,則是修改資料
六、資料查詢
1、籠統方式查詢
① db.資料表.find() 查詢資料表的全部資料
② db.資料表.findOne() 查詢資料表的第一條資料
③ db.資料表.find().pretty() 以美觀的方式輸出
2、條件限制查詢(只要是條件都必須加{})
① db.資料表.find(條件)
② db.資料表.findOne(條件)
有相同資訊時,返回滿足結果裡的第一條資訊
3、範圍條件查詢
關鍵字:$gt $lt $gte $lte
注意:關鍵字$gt左右必須有引號,在命令列:單雙引號都可以。
① $gt大於
查詢集合中價格大於1200的
② $gte大於等於
查詢集合中價格大於等於1200的
③ $lt小於
查詢集合中價格小於1999的
④ $lte小於等於
查詢集合中價格小於等於1999的
4、設定多個查詢條件
①例如:價格大於1000,並且重量等於50
db.goods.find({price:{'$gt':1000},weight:50})
②例如:價格小於等於1999並且重量大於134
5、多維欄位的查詢(({{}})有巢狀時必須加”’’)
①db.表.find({‘key.name’:值})
注意:key.name必須要使用引號進行引住。
② db.表.find({key.name:{‘$gt’:值}})
③ db.表.find({key.name:{‘$gt’:值},key2.name2:{‘$lt’:值}})
6、陣列條件的限制(裡面有陣列[ ],滿足一個條件即可)
① db.表.find({陣列的那個欄位名:val})
這種形式的:
//查詢顏色有紅色記錄條數,滿足一個元素即可
② 這種查法是color必須只有黑、白、紅,而且順序必須是儲存文件的那個順序。
③ db.表.find({欄位(陣列):{‘$all’:[v1,v2]}})
//只要同時滿足有黑色和白色就可以查詢出來
7、限制查詢欄位(查詢部分欄位)
db.表.find({條件},{欄位:1/0,欄位:1/0}
1: 查詢此欄位
0: 排除此欄位
find()方法的第一個引數必須要有,如果沒有條件的話,就是{}
① 只查詢name欄位:
注意:_id這個欄位是預設顯示出來的。如果不想讓_id這個欄位顯示出來,可以下面這樣:
規則:要輸出就全部輸出,要不輸出就全部不輸出;_id除外,可以隨意設定0,1 ;一個0一個1報錯:要是0都是0,要是1都是1。
設定為全部輸出
設定為全部不輸出
② $or查詢,多個條件,滿足其一即可
③ $in和$nin:在陣列/不在陣列
④ $all 查詢:表示完全匹配
$in 與 $all的區別
使用$in進行查詢:只要含有數組裡的就行。
再使用$all進行查詢:數組裡的必須同時滿足才行:必須是陣列
8、(瞭解)自定義條件:$where
$where:通過函式自定義條件[JS函式],在指定的函式中,返回boolean型別的值,this表示每個要查詢的文件。
9、資料查詢---限制查詢條數
限制查詢5條記錄
10、資料查詢--跳過記錄行數,(從1開始數的)
下面命令的意思是說:skip(2)是跳過前兩行記錄,limit(2)顯示後面的兩條記錄。
從第三條資訊開始顯示的,且只顯示2條
11、分頁查詢(重點)
現在我想顯示第5頁的資料:
第一頁的資料是:0 1
第二頁的資料是:2 3
第三頁的資料是:4 5
第四頁的資料是:6 7
第五頁的資料是:8 9
所以skip()方法裡面的引數值的公式:2(n-1)
12、資料查詢---排序
① 1表示升序:
按照價格升序
② -1表示降序:
按照價格降序:
13、資料查詢---統計個數 count
14、資料查詢--去重 distinct
給價格去重:
即給價格去重,又滿足數字為45的
七、修改資料
1、有$set的修改:只修改設定的欄位,其他欄位不變化
把名字為小花的修改成name為小剛
F5檢視軟體重新整理一下,可看見改了資料
2、沒有$set的修改:只修改設定的欄位,沒有修改的欄位就會刪除了(除了_id欄位)
八、刪除資料 remove
1、一次刪除多條資料(有多條符合條件的資料都刪掉),
由於預設為false,所以可以省略此引數
2、一次只刪除一條資料:加上true
3、清空所有的資料
4、刪除欄位 $unset
db.表.update({條件},{‘$unset’:{欄位:1/欄位:0}})
注意:設定的欄位0或是1都是可以進行刪除此欄位的。
現在再檢視:會看到把name 和price欄位刪了
九、擴充套件:修改資料
MongoDB這個產品是基於js引擎開發出來的。
1、修改器的使用($set、$inc等)
① 通過修改器$set將zs3的年齡修改為33,其它值不變
注意:修改器名稱的引號可加可不加,在這裡統一下,新增上吧。
② 給zs10的年齡增加兩歲 $inc
③ 第三個引數的使用 true
當我們再修改資料時,如果沒有符合條件的,就直接新增加一條資料。
不寫第三個引數時,預設false,不新增。
寫上true,會新增上資料
④ 測試一次修改多條(第四個引數的使用)
如果一次性有多條資料滿足要求時,那麼第四個引數設為true時,就全部修改了。
也就是:第四個引數:預設false,只修改一條,為true時,修改多條資料。
把name為zs2的age修改為250:
2、練習例項
① 查詢所有的男生資料(只需要學生的姓名和年齡)
限制欄位查詢:
② 查詢成績及格的學生資訊(學生成績大於或等於60分)
③ 查詢所有18歲的男生和16歲的女生的資料
④ 按照學生的年齡進行排序
升序
降序
⑤ 將所有的學生年齡增加2歲(每個增加一遍)
格式:給zs10這個同學年齡增加2歲,其它的同學再寫