網(wǎng)站建設(shè)銀川網(wǎng)站注冊時間查詢
目錄
一、MongoDB數(shù)據(jù)庫原理
二、MongoDB數(shù)據(jù)庫和集合基本操作(增刪改查)
三、MongoDB數(shù)據(jù)庫的文檔基本操作(增刪改)
四、學(xué)習(xí)筆記
往期文章:【NoSQL數(shù)據(jù)庫】MongoDB數(shù)據(jù)庫的安裝與卸載-CSDN博客
一、MongoDB數(shù)據(jù)庫原理
????????MongoDB層次(從小到大):鍵值對—文檔—集合—數(shù)據(jù)庫
????????MongoDB是一個開源文檔數(shù)據(jù)庫,提供高性能,高可用性和自動擴(kuò)展,旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。
???????MongoDB中的記錄是一個文檔,它是由字段和值(key=>value)對組成的數(shù)據(jù)結(jié)構(gòu)。 MongoDB文檔與JSON對象相似。 字段的值可能包括其他文檔,數(shù)組和文檔數(shù)組。
????????在MongoDB中基本的概念是文檔(document)、集合(collection)、數(shù)據(jù)庫(database)。
SQL術(shù)語/概念 | MongoDB術(shù)語/概念 | 解釋/說明 |
database | database | 數(shù)據(jù)庫 |
table | collection | 數(shù)據(jù)庫表/集合 |
row | document | 數(shù)據(jù)記錄行/文檔 |
column | Field | 數(shù)據(jù)字段/域 |
index | Index | 索引 |
table joins | 表連接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將_id字段設(shè)置為主鍵 |
二、MongoDB數(shù)據(jù)庫和集合基本操作(增刪改查)
1、啟動mongodb,并進(jìn)入命令行,如下圖所示
2、MongoDB創(chuàng)建數(shù)據(jù)庫
(1)使用/創(chuàng)建數(shù)據(jù)庫Employee,命令use Employee
(2)顯示所有數(shù)據(jù)庫,命令show dbs
(3)向Employee插入數(shù)據(jù),命令
db.Employee.insert({“name”:”google”})
3、MongoDB刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫Employee,需要進(jìn)入該數(shù)據(jù)庫,命令db.dropDatabase()
4、集合操作
(1)創(chuàng)建集合
在myDB數(shù)據(jù)庫里創(chuàng)建集合myCollection,命令
db.createCollection("myCollection")
(2)查詢集合
在數(shù)據(jù)庫myDB里查詢所有集合,命令show collections
(3)對集合重命名
將集合myCollection重命名mycoll,命令
db.myCollrction.renameCollection("mycoll")
(4)刪除集合,命令db.mycoll.drop()
重復(fù)練習(xí),在數(shù)據(jù)庫myDB里創(chuàng)建集合AAA并把其重命名為aaa,再刪除集合aaa,如下圖所示:
三、MongoDB數(shù)據(jù)庫的文檔基本操作(增刪改)
1、先使用MongoDB數(shù)據(jù)庫Employee
創(chuàng)建集合AAA
2、向集合AAA中插入表格所示的文檔數(shù)據(jù),使用db.AAA.insert()
_id | Count | Test2 | Test5 |
“自動生成” | 1 | Flase | True |
“自動生成” | 2 | Flase | True |
“自動生成” | 3 | Flase | True |
“自動生成” | 4 | Flase | True |
“自動生成” | 5 | Flase | True |
“自動生成” | 6 | Flase | True |
“自動生成” | 7 | Flase | True |
“自動生成” | 8 | Flase | True |
“自動生成” | 9 | Flase | True |
如下所示:
用db.AAA.find()查詢集合AAA里的所有文檔數(shù)據(jù)
3、將Count值大于1的第一條記錄中Test2更新為OK,即修改Count值為2的記錄,使用db.AAA.update(),如下所示:
db.AAA.update({Count: {$gt:1}},{$set: {Test2: "OK"}})
查看更新情況,顯示Count值為2的Test2內(nèi)容已更新為OK。
4、將Count值大于2的所有記錄中Test2全部更新為OK。
這里需要添加一個multi參數(shù),設(shè)置為true表示update操作會更新所有符合條件的記錄,設(shè)置為false表示只更新第一條符合條件的記錄。這里要全部更新,設(shè)置為true,如下所示:
db.AAA.update({Count:{$gt:2}},{$set: {Test2: "OK"}},{multi:true})
可以看到,Count值為3~9的記錄中Test2內(nèi)容更新為OK。
5、將Count值大于3的第一記錄中Test5用添加方式(通過配置upsert)更新為OK。
這里使用到upsert參數(shù),設(shè)置為true,表示如果沒有找到符合條件的記錄,就插入一個新記錄,設(shè)置為false,表示如果沒有找到符合條件的記錄,不會執(zhí)行插入新記錄。本題已經(jīng)有Count值大于3的記錄,所以upsert設(shè)置成什么值暫時不會影響數(shù)據(jù)的添加。因?yàn)槭侵桓路蠗l件的第一條記錄,所以multi值為false,如下所示:
db.AAA.update({Count:{$gt:3}},{$set:{Test5:"OK"}},{upsert:true,multi:false})
可以看到,Count值為4的記錄中Test5內(nèi)容更新為OK。
6、將Count值大于4的所有記錄中Test5用添加方式更新為OK。
更新所有符合條件的記錄,只需要將上題的語句中multi值改為true即可,如下所示:
db.AAA.update({Count:{$gt:4}},{$set:{Test5:"OK"}},{upsert:true,multi:true})
可以看到,Count值為5~9的記錄中Test5內(nèi)容更新為OK。
7、采用更新的方式,將Count值大于5的所有記錄中Count值全部增加1。
$inc是遞增操作符,用于實(shí)現(xiàn)對Count字段值增加1的操作,這里更新所有記錄mutli值為true,如下所示:
db.AAA.update({Count: {$gt:5}},{$inc: {Count:1}},{multi:true})
可以看到,Count值為6~9的記錄的Count值都加了1。
8、采用更新的方式,將Count值大于10的第一個記錄中Count值增加2。
由于目前集合里沒有Count值大于10的記錄,所以執(zhí)行更新語句顯示沒有找到符合條件的文檔,都是0,如下所示
db.AAA.update({Count: {$gt:10}},{$inc: {Count:2}},{multi:false})
因此先添加一條Count為11的記錄,再進(jìn)行更新語句,如下所示:
db.AAA.insert({Count:11,Test2:'OK',Test5:'OK'})
可以看到,Count為11的記錄的Count值已經(jīng)變成了13。
9、刪除集合AAA下的所有文檔,使用db.AAA.remove({}),如下所示:
四、學(xué)習(xí)筆記
????????插入文檔使用db.collection.insert()來實(shí)現(xiàn),如果不指定_id的值,則MongoDB會自動生成一串字符來表示_id。更新文檔使用db.collection.update()來實(shí)現(xiàn),其中有兩個可選參數(shù),一個是multi,一個是upsret。multi參數(shù)設(shè)置為true,表示update操作會更新所有符合條件的記錄,設(shè)置為false表示只更新第一條符合條件的記錄。upsert參數(shù)設(shè)置為true,表示如果沒有找到符合條件的記錄,就插入一個新記錄,設(shè)置為false,表示如果沒有找到符合條件的記錄也不會執(zhí)行插入新記錄。
????刪除文檔使用db.collection.delete Many({})或db.col.remove({}),刪除指定文檔使用db.collection.deleteOne。