數(shù)據(jù)庫(kù)MongoDB的文檔操作是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站技術(shù)團(tuán)隊(duì)10多年來(lái)致力于為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過(guò)多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了近千家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
在MongoDB中文檔是指多個(gè)鍵及其關(guān)聯(lián)的值有序地放置在一起就是文檔,其實(shí)指的就是數(shù)據(jù),也是我們平時(shí)操作最多的部分。
MongoDB中的文檔的數(shù)據(jù)結(jié)構(gòu)和 JSON 基本一樣。所有存儲(chǔ)在集合中的數(shù)據(jù)都是 BSON 格式。
BSON 是一種類似 JSON 的二進(jìn)制形式的存儲(chǔ)格式,是 Binary JSON 的簡(jiǎn)稱。
注意:
新增時(shí)不需要考慮field,如果field已經(jīng)存在則向指定field中新增。如果field不存在,則在collection中新添加一個(gè)filed
向collection中新增數(shù)據(jù)時(shí),如果collection不存在,則自動(dòng)創(chuàng)建collection
向dev集合中插入單個(gè)文檔。
可以使用insert/insertOne/save執(zhí)行新增,語(yǔ)法完全相同,下面是三種寫法等效:
db.c1.insert({name:"張三"}); db.c1.save({name:"張三"}); db.c1.insertOne({name:"張三"});
區(qū)別:
當(dāng)明確給定主鍵時(shí),如果主鍵值已經(jīng)存在save表示修改,insert/insertOne會(huì)報(bào)主鍵重復(fù)。
注意:(save修改必須在MongoDB的客戶端操作,不能使用第三方客戶端,否則無(wú)法執(zhí)行成功)
命令中_id是ObjectId類型,需要通過(guò)ObjectId函數(shù)把字符串轉(zhuǎn)換為ObjectId
db.c1.save({_id:ObjectId("5e81b3ac4d4d000026004f6a"),name:"jqk"})
可以使用insert/insertMany/save執(zhí)行新增,區(qū)別于單條新增把新增函數(shù)參數(shù)由對(duì)象類型({})變成數(shù)組類型([{}])下面是三種寫法等效:
db.c1.insert([{name:"a"},{name:"b"}]); db.c1.insertMany([{name:"a"},{name:"b"}]); db.c1.save([{name:"a"},{name:"b"}]);
MongoDB通過(guò)update函數(shù)或者save函數(shù)來(lái)更新集合中的文檔。
update() 函數(shù)用于更新已存在的文檔。
語(yǔ)法格式:db.COLLECTION_NAME.update({查詢條件},{更新內(nèi)容},{更新參數(shù)(可選)})
其中更新內(nèi)容為整個(gè)文檔更新內(nèi)容,如果更新內(nèi)容中只有一個(gè)屬性,除了_id以外其他屬性將會(huì)被設(shè)置null。
先新增一條測(cè)試數(shù)據(jù)
db.c1.insert({name:"張三",age:12,address:"地址"});
修改,name改成了李四,age和address都被設(shè)置null了。(mongodb中如果一個(gè)集合中某個(gè)屬性所有的文檔對(duì)象都為空時(shí)會(huì)刪除這個(gè)屬性)
db.c1.update({name:"張三"},{name:"李四"});
$set操作符:用來(lái)指定一個(gè)鍵并更新鍵值,若鍵不存在并創(chuàng)建。只能修改第一個(gè)document
語(yǔ)法格式:db.COLLECTION_NAME.update({查詢條件},{更新操作符:{更新內(nèi)容}})
$set的作用總結(jié):
只修改特定的Field,解決update默認(rèn)修改整個(gè)document情況
db.c1.update({name:"張三"},{$set:{name:"王五"}});
默認(rèn)只修改符合條件的第一個(gè)document,如果需要全部修改,添加更新參數(shù)multi:true
db.c1.update({name:"張三"},{$set:{age:18}},{multi:true});
如果Field不存在,可以新建一個(gè)Field
db.c1.update({name:"張三"},{$set:{sex:"男"}})
$inc操作符:可以對(duì)文檔的某個(gè)值為數(shù)字型(只能為滿足要求的數(shù)字)的鍵進(jìn)行增減的操作。如果給定正數(shù)表示新增,如果給定負(fù)數(shù)表示減少。
把王五的年齡減少5歲。
db.c1.update({name:"王五"},{$inc:{age:-5}});
$unset
操作符:主要是用來(lái)刪除鍵。讓鍵的值為空。在編寫命令時(shí)$unset里field取值任意,無(wú)論給定什么值都表示刪除。
刪除名稱為王五的地址。
db.c1.update({name:"王五"},{$unset:{address:"隨意"}});
$push
操作符:向文檔的某個(gè)數(shù)組類型的鍵添加一個(gè)數(shù)組元素,不過(guò)濾重復(fù)的數(shù)據(jù)。添加時(shí)鍵存在,要求鍵值類型必須是數(shù)組;鍵不存在,則創(chuàng)建數(shù)組類型的鍵。
向集合c1中所有文檔對(duì)象添加了數(shù)組類型屬性hobby,并添加一個(gè)值寫代碼。如果再次執(zhí)行,表示向hobby中再添加一個(gè)值寫代碼。默認(rèn)只修改符合條件的第一條,如果需要全部修改,添加multi屬性。
db.c1.update({},{$push:{hobby:"寫代碼"}},{multi:true});
$pop操作符:刪除數(shù)據(jù)元素??扇≈抵荒苁?或-1。1表示尾部刪除,-1表示頭部刪除
刪除hobby中第一個(gè)元素。其中$pop中key是要操作的數(shù)組類型屬性。
db.c1.update({name:"李四"},{$pop:{hobby:-1}})
$pull操作符:從數(shù)組中刪除滿足條件的元素,只要滿足條件都刪除。
刪除hobby中元素內(nèi)容為看尚學(xué)堂視頻,如果存在多個(gè)都刪除。
db.c1.update({name:“王五”},{$pull:{hobby:“看尚學(xué)堂視頻”}});
$pullAll
操作符:可以設(shè)置多個(gè)條件。
刪除王五中hobby為寫代碼和看尚學(xué)堂視頻的值。其中屬性(hobby)取值一定要是數(shù)組類型。
db.c1.update({name:"王五"},{$pullAll:{hobby:["寫代碼","看尚學(xué)堂的視頻"]}});
$rename
操作符:對(duì)鍵進(jìn)行重新命名。任何類型的鍵都能重命名。
修改王五的name屬性為username。
db.c1.update({name:"王五"},{$rename:{name:"username"}});
在MongoDB中可以使用find()函數(shù)查詢文檔。
語(yǔ)法格式為:find({查詢條件(可選)},{指定投影的鍵(可選)})
如果未給定參數(shù)則表示查詢所有數(shù)據(jù)。
db.c1.find();
查詢所有name為張三的文檔對(duì)象
db.c1.find({name:"張三"})
投影查詢指的就是哪些列被顯示或不被顯示。寫到投影(projection)里面的屬性可取值為1(顯示)或0(不顯示)。除了_id以外其他屬性取值必須是相同。
sex和hobby不顯示,其他屬性都顯示
db.c1.find({name:"張三"},{sex:0,hobby:0})
顯示sex和hobby,默認(rèn)_id也是顯示
db.c1.find({name:"張三"},{sex:1,hobby:1})
只顯示sex和hobby。只有這種情況才能出現(xiàn)屬性取值不一樣
db.c1.find({name:"張三"},{_id:0,sex:1,hobby:1})
findOne()函數(shù)只返回滿足條件的第一條數(shù)據(jù)。
返回第一行document對(duì)象。
db.c1.findOne();
返回名字為張三的第一條數(shù)據(jù)
db.c1.findOne({name:"張三"})
MongoDB中查詢條件也可以使用正則表達(dá)式作為匹配約束。正則表達(dá)式語(yǔ)法與JavaScript正則表達(dá)式語(yǔ)句完全相同。正則內(nèi)容需要寫在 / / 之前。
語(yǔ)法格式:db.COLLECTION_NAME.find({字段名:正則表達(dá)式});、
可以實(shí)現(xiàn)模糊查詢
查詢name中存在三的文檔對(duì)象
db.c1.find({name:/三/});
或
db.COLLECTION_NAME.find({字段名:{$regex:正則表達(dá)式,$options:正則選項(xiàng)}});
第二種方式比第一種方式多了正則選項(xiàng),功能更多。
正則表達(dá)式格式:/xxx/
正則選項(xiàng):
i - 不區(qū)分大小寫以匹配大小寫的情況。
m - 多行查找,如果內(nèi)容里面不存在換行符號(hào)(例如 \n)或者條件上沒(méi)有(start/end),該選項(xiàng)沒(méi)有任何效果
x - 設(shè)置x選項(xiàng)后,正則表達(dá)式中的非轉(zhuǎn)義的空白字符將被忽略。需要 r e g e x 與 regex與 regex與options語(yǔ)法
s - 允許點(diǎn)字符(即.)匹配包括換行符在內(nèi)的所有字符。需要 r e g e x 與 regex與 regex與options語(yǔ)法
i,m,x,s可以組合使用。
示例:
錄入數(shù)據(jù)
db.c1.insert({name:"abc"}); db.c1.insert({name:"bcd"}); db.c1.insert({name:"ABC"}); db.c1.insert({name:"BCD"});
只能查詢包含小寫b的文檔對(duì)象
db.c1.find({name:/b/})
查詢時(shí)不區(qū)分大小寫,只要包含b或B都能查詢出來(lái)
db.c1.find({name:{ r e g e x : / b / , regex:/b/, regex:/b/,options:“i”}});
條件操作符用于比較兩個(gè)表達(dá)式并從mongoDB集合中獲取數(shù)據(jù)。
語(yǔ)法格式:find({鍵:{操作符:條件}})或者findOne({鍵:{操作符:條件}})
(>) 大于操作符,greater than 縮寫。用right記憶,表示右側(cè)角括號(hào)。
查詢所有年齡大于10的文檔對(duì)象
db.c1.find({age:{$gt:10}});
(<) 小于操作符。less than縮寫,用left記憶,左角括號(hào)
查詢所有年齡小于10的文檔對(duì)象
db.c1.find({age:{$lt:10}});
(==)等于操作符,equals
查詢年齡等于8
db.c1.find({age:{$eq:8}});
等效于
db.c1.find({age:8});
(!=)不等操作符 not equals
查詢所有年齡不是18歲的,包含了age屬性沒(méi)有值的文檔對(duì)象。
db.c1.find({age:{$ne:8}});
(>=)大于或等于操作符greater than equals
查詢所有年齡大于等于8的文檔對(duì)象。如果文檔沒(méi)有age屬性無(wú)法被查詢。
db.c1.find({age:{$gte:8}});
(<=)小于或等于操作符less than equals
查詢小于等于8的文檔對(duì)象。
db.c1.find({age:{$lte:8}});
我們可以使用 i n 操 作 符 來(lái) 表 示 多 條 件 查 詢 , in操作符來(lái)表示多條件查詢, in操作符來(lái)表示多條件查詢,in中多條件的關(guān)系為或者關(guān)系,只要滿足其中一個(gè)就能被查詢出來(lái),由于$in取值為多個(gè),所以是數(shù)組類型。
查詢年齡為8或10或12的文檔對(duì)象
db.c1.find({age:{$in:[8,10,12]}})
not in,與$in的結(jié)果取反。
只要age不是8或10或12的文檔對(duì)象都能查詢出來(lái)。
db.c1.find({age:{$nin:[8,10,12]}})
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。