1. 程式人生 > >四十九、MongoDB資料庫1:MongoDB的增、刪、改、查

四十九、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歲,其它的同學再寫