MongoDB(芒果数据库)学习(一)———增删改查
MongoDB數(shù)據(jù)庫(kù)CRUD(增刪改查)的操作
(1)NoSQL 簡(jiǎn)介
NoSQL有時(shí)也稱作Not Only SQL的縮寫,意即"不僅僅是SQL"。
現(xiàn)代的計(jì)算網(wǎng)絡(luò),每天上都會(huì)產(chǎn)生大量數(shù)據(jù)。
這些數(shù)據(jù)大部分都是由關(guān)系性數(shù)據(jù)庫(kù)系統(tǒng)(RDBMS)來管理的。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。
現(xiàn)在針對(duì)大數(shù)據(jù)處理以及高并發(fā)、高讀寫推薦使用,NoSQL被廣泛應(yīng)用。(例如國(guó)外的谷歌、Facebook。國(guó)內(nèi)阿里、騰訊每天為用戶收集萬億比特的數(shù)據(jù))等,創(chuàng)業(yè)型公司很多使用。NoSQL無需多余操作就可以橫向擴(kuò)展。
(2)MongoDB三個(gè)概念
MongoDB的數(shù)據(jù)模型是面向文檔的,簡(jiǎn)單理解 這個(gè)數(shù)據(jù)庫(kù)中存的是各種各樣的 JSON。(BSON)。
MongoDB屬于NOSQL,了解mongodb需要先知道這三個(gè)名詞代表含義。
數(shù)據(jù)庫(kù)是一個(gè)倉(cāng)庫(kù),在倉(cāng)庫(kù)中可以存放集合。
集合類似于數(shù)組,在集合中可以存放文檔。
(類似于SQL中的表空間)
文檔數(shù)據(jù)庫(kù)中的最小單位,我們存儲(chǔ)和操作的 內(nèi)容都是文檔。
(類似于SQL中的表)
以上為了方便理解與傳統(tǒng)SQL進(jìn)對(duì)比,但之后不要SQL思想去學(xué)習(xí)。
二、MongoDB操作
(1)MongoDB基本指令
在mongodb中,數(shù)據(jù)庫(kù)和集(collection)都不需要手動(dòng)創(chuàng)建,當(dāng)我們創(chuàng)建的文檔時(shí),如果文檔所在的集合或數(shù)據(jù)庫(kù)都沒有,mongodb會(huì)自動(dòng)創(chuàng)建集合與數(shù)據(jù)庫(kù)。
基本指令:
1、Show dbs/Show databases
顯示當(dāng)前的所有數(shù)據(jù)庫(kù)
2、Use test_table
進(jìn)入document文件(或者表中)
3、db
表示當(dāng)前所處數(shù)據(jù)庫(kù)
4、show collections
顯示所有集合
(2)數(shù)據(jù)庫(kù)CRUD的操作
操作工具使用的是studio3T。
因?yàn)槭褂谜Z法,還是想講的細(xì)一點(diǎn)兒。會(huì)附截圖。
1、Insert(向集合中插入文檔)
單個(gè):db.collection.insert()或者 db.collection.insertOne()
db.emp.insert({name:“索隆”,postion:“左副”,gender:“男”});
多個(gè):db.collection.insertMany()
這里需要注意下寫法,"[ ]" ,如果寫成了
會(huì)只有一條記錄,之后也會(huì)有"[ ]" 這種問題,但只是寫法問題就不去提了。
所以寫成:
或者寫成官方文檔格式:
都是可以的。
以上是Insert()、insertOne()、insertmany()、區(qū)別不大。
但One會(huì)明確插入一個(gè),Many會(huì)插入多個(gè),在官方文檔也是說明在3.2版本后追加的新功能,肯定還是有一定作用。
之后的改刪會(huì)有區(qū)別。有詳講。
2、Find(查詢所有符合條件的文檔)
多個(gè):db.collection.find()
因?yàn)闆]有檢索條件,就全部顯示出
在混合寫法中,默認(rèn)為且條件
沒有符合條件的數(shù)據(jù)就顯示為零條。
單個(gè):db.collection.findOne()或者db.collection.find(條件)
圖示12行代碼為檢索符合條件,顯示第一條數(shù)據(jù)。
圖示13行代碼為檢索符合條件,顯示第2條( [序數(shù)])數(shù)據(jù)。
值得注意的是find(返回的是數(shù)組),find返回的是對(duì)象,可通過打點(diǎn)調(diào)用的方式,返回?cái)?shù)組大小或者對(duì)象屬性。
3、Update(修改符合條件的文檔)
修改字段值:db.collection.update() //db.collection.updateMany()
我們想把這個(gè)“娜美”的性別變換為女性。
按照官方文檔我們成功的將性別進(jìn)行了更改。
如果我們沒有寫$set會(huì)發(fā)生以下情況。
看日志是成功了!
但實(shí)際人給弄丟了。
增加字段值:db.collection.update()
針對(duì)沒有的字段,不用像Oracle新建,直接就可自動(dòng)創(chuàng)建。
除了在update中增加字段,在insert時(shí)mongodb都會(huì)根據(jù)需要自動(dòng)創(chuàng)建。因此擴(kuò)展性強(qiáng)。
但值得注意的是,數(shù)據(jù)中有兩個(gè)“索隆”,update與updateOne 都只是默認(rèn)改第一個(gè),不過可以使用。db.collection.updateMany()去修改多個(gè),所有匹配的,都會(huì)更改,在此不再截圖證明了。
但update實(shí)際是updateOne()與updateMany()的綜合體
在官方文檔中,update有很多屬性,當(dāng)使用update將multi設(shè)置為true時(shí)即可更改多條符合條件數(shù)據(jù)。
當(dāng)我們執(zhí)行以下指令:
會(huì)發(fā)現(xiàn)符合條件的數(shù)據(jù)都發(fā)生了變化!
4、Delete(修改符合條件的文檔)
刪除數(shù)據(jù):
db.collection.deleteOne()
db.collection.deleteMany()
db.collection.remove()
在這里,deleteMany與remove的處理結(jié)果都是相同的都是符合條件所有數(shù)據(jù)
但是在remove屬性,增加true條件會(huì)只刪除一個(gè),deleteone效果相同,官方文檔有說明:
但常同刪除數(shù)據(jù)的方法,是將其中一個(gè)字段設(shè)置為isDel為1,當(dāng)顯示數(shù)據(jù)時(shí)顯示isDel為0的數(shù)據(jù),即可達(dá)成刪除數(shù)據(jù)的目的。好處是任何刪除的數(shù)據(jù),都可還原,提高數(shù)據(jù)安全性。
刪除集合
db.collection.remove()
db.collection.drop()
當(dāng)使用:
db.emp.remove({});
db.emp.drop();
會(huì)將collection也刪除掉
如果remove方法傳入空對(duì)象,也會(huì)將集合刪除
但處理過程為一條條刪除,效率會(huì)很低,當(dāng)真的需要?jiǎng)h除時(shí),可直接使用db.collection.drop()。
當(dāng)然還有db.dropdatabase().刪除數(shù)據(jù)庫(kù),除非你已經(jīng)做好了刪庫(kù)跑路的準(zhǔn)備。還有2020年2月24號(hào)的新聞,惡意刪庫(kù)犯罪人被判刑了兩年,因此你們懂得!
三、結(jié)語:
感謝閱讀文章,您的贊是對(duì)我的激勵(lì)。如有錯(cuò)誤請(qǐng)示作者改正,萬分感謝。
認(rèn)真做好每一件事,只為做個(gè)細(xì)心的人。
長(zhǎng)大后發(fā)現(xiàn)時(shí)間流逝的真的很快。
有這樣一個(gè)小故事: 曾國(guó)藩小時(shí)晚上背書,墻外有個(gè)小偷,就等呀等呀!等了很多個(gè)時(shí)辰,發(fā)現(xiàn)還沒背完。最后小偷生氣的一腳踹開門,當(dāng)著曾國(guó)藩的面將他背誦的內(nèi)容背誦了出來。
并羞辱的說道:你這么笨還浪費(fèi)什么燈油。
但十年后,小偷仍舊是小偷,而曾國(guó)藩已經(jīng)成了舉世聞名的大人物!
時(shí)間不是用來流逝的,而是用來積累的。
加油!
總結(jié)
以上是生活随笔為你收集整理的MongoDB(芒果数据库)学习(一)———增删改查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Palo Alto Networks全球
- 下一篇: 芒果数据库