您好,登錄后才能下訂單哦!
數據庫MongoDB的文檔操作是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在MongoDB中文檔是指多個鍵及其關聯的值有序地放置在一起就是文檔,其實指的就是數據,也是我們平時操作最多的部分。
MongoDB中的文檔的數據結構和 JSON 基本一樣。所有存儲在集合中的數據都是 BSON 格式。
BSON 是一種類似 JSON 的二進制形式的存儲格式,是 Binary JSON 的簡稱。
注意:
新增時不需要考慮field,如果field已經存在則向指定field中新增。如果field不存在,則在collection中新添加一個filed
向collection中新增數據時,如果collection不存在,則自動創建collection
向dev集合中插入單個文檔。
可以使用insert/insertOne/save執行新增,語法完全相同,下面是三種寫法等效:
db.c1.insert({name:"張三"}); db.c1.save({name:"張三"}); db.c1.insertOne({name:"張三"});
區別:
當明確給定主鍵時,如果主鍵值已經存在save表示修改,insert/insertOne會報主鍵重復。
注意:(save修改必須在MongoDB的客戶端操作,不能使用第三方客戶端,否則無法執行成功)
命令中_id是ObjectId類型,需要通過ObjectId函數把字符串轉換為ObjectId
db.c1.save({_id:ObjectId("5e81b3ac4d4d000026004f6a"),name:"jqk"})
可以使用insert/insertMany/save執行新增,區別于單條新增把新增函數參數由對象類型({})變成數組類型([{}])下面是三種寫法等效:
db.c1.insert([{name:"a"},{name:"b"}]); db.c1.insertMany([{name:"a"},{name:"b"}]); db.c1.save([{name:"a"},{name:"b"}]);
MongoDB通過update函數或者save函數來更新集合中的文檔。
update() 函數用于更新已存在的文檔。
語法格式:db.COLLECTION_NAME.update({查詢條件},{更新內容},{更新參數(可選)})
其中更新內容為整個文檔更新內容,如果更新內容中只有一個屬性,除了_id以外其他屬性將會被設置null。
先新增一條測試數據
db.c1.insert({name:"張三",age:12,address:"地址"});
修改,name改成了李四,age和address都被設置null了。(mongodb中如果一個集合中某個屬性所有的文檔對象都為空時會刪除這個屬性)
db.c1.update({name:"張三"},{name:"李四"});
$set操作符:用來指定一個鍵并更新鍵值,若鍵不存在并創建。只能修改第一個document
語法格式:db.COLLECTION_NAME.update({查詢條件},{更新操作符:{更新內容}})
$set的作用總結:
只修改特定的Field,解決update默認修改整個document情況
db.c1.update({name:"張三"},{$set:{name:"王五"}});
默認只修改符合條件的第一個document,如果需要全部修改,添加更新參數multi:true
db.c1.update({name:"張三"},{$set:{age:18}},{multi:true});
如果Field不存在,可以新建一個Field
db.c1.update({name:"張三"},{$set:{sex:"男"}})
$inc操作符:可以對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作。如果給定正數表示新增,如果給定負數表示減少。
把王五的年齡減少5歲。
db.c1.update({name:"王五"},{$inc:{age:-5}});
$unset
操作符:主要是用來刪除鍵。讓鍵的值為空。在編寫命令時$unset里field取值任意,無論給定什么值都表示刪除。
刪除名稱為王五的地址。
db.c1.update({name:"王五"},{$unset:{address:"隨意"}});
$push
操作符:向文檔的某個數組類型的鍵添加一個數組元素,不過濾重復的數據。添加時鍵存在,要求鍵值類型必須是數組;鍵不存在,則創建數組類型的鍵。
向集合c1中所有文檔對象添加了數組類型屬性hobby,并添加一個值寫代碼。如果再次執行,表示向hobby中再添加一個值寫代碼。默認只修改符合條件的第一條,如果需要全部修改,添加multi屬性。
db.c1.update({},{$push:{hobby:"寫代碼"}},{multi:true});
$pop操作符:刪除數據元素。可取值只能是1或-1。1表示尾部刪除,-1表示頭部刪除
刪除hobby中第一個元素。其中$pop中key是要操作的數組類型屬性。
db.c1.update({name:"李四"},{$pop:{hobby:-1}})
$pull操作符:從數組中刪除滿足條件的元素,只要滿足條件都刪除。
刪除hobby中元素內容為看尚學堂視頻,如果存在多個都刪除。
db.c1.update({name:“王五”},{$pull:{hobby:“看尚學堂視頻”}});
$pullAll
操作符:可以設置多個條件。
刪除王五中hobby為寫代碼和看尚學堂視頻的值。其中屬性(hobby)取值一定要是數組類型。
db.c1.update({name:"王五"},{$pullAll:{hobby:["寫代碼","看尚學堂的視頻"]}});
$rename
操作符:對鍵進行重新命名。任何類型的鍵都能重命名。
修改王五的name屬性為username。
db.c1.update({name:"王五"},{$rename:{name:"username"}});
在MongoDB中可以使用find()函數查詢文檔。
語法格式為:find({查詢條件(可選)},{指定投影的鍵(可選)})
如果未給定參數則表示查詢所有數據。
db.c1.find();
查詢所有name為張三的文檔對象
db.c1.find({name:"張三"})
投影查詢指的就是哪些列被顯示或不被顯示。寫到投影(projection)里面的屬性可取值為1(顯示)或0(不顯示)。除了_id以外其他屬性取值必須是相同。
sex和hobby不顯示,其他屬性都顯示
db.c1.find({name:"張三"},{sex:0,hobby:0})
顯示sex和hobby,默認_id也是顯示
db.c1.find({name:"張三"},{sex:1,hobby:1})
只顯示sex和hobby。只有這種情況才能出現屬性取值不一樣
db.c1.find({name:"張三"},{_id:0,sex:1,hobby:1})
findOne()函數只返回滿足條件的第一條數據。
返回第一行document對象。
db.c1.findOne();
返回名字為張三的第一條數據
db.c1.findOne({name:"張三"})
MongoDB中查詢條件也可以使用正則表達式作為匹配約束。正則表達式語法與JavaScript正則表達式語句完全相同。正則內容需要寫在 / / 之前。
語法格式:db.COLLECTION_NAME.find({字段名:正則表達式});、
可以實現模糊查詢
查詢name中存在三的文檔對象
db.c1.find({name:/三/});
或
db.COLLECTION_NAME.find({字段名:{$regex:正則表達式,$options:正則選項}});
第二種方式比第一種方式多了正則選項,功能更多。
正則表達式格式:/xxx/
正則選項:
i - 不區分大小寫以匹配大小寫的情況。
m - 多行查找,如果內容里面不存在換行符號(例如 \n)或者條件上沒有(start/end),該選項沒有任何效果
x - 設置x選項后,正則表達式中的非轉義的空白字符將被忽略。需要 r e g e x 與 regex與 regex與options語法
s - 允許點字符(即.)匹配包括換行符在內的所有字符。需要 r e g e x 與 regex與 regex與options語法
i,m,x,s可以組合使用。
示例:
錄入數據
db.c1.insert({name:"abc"}); db.c1.insert({name:"bcd"}); db.c1.insert({name:"ABC"}); db.c1.insert({name:"BCD"});
只能查詢包含小寫b的文檔對象
db.c1.find({name:/b/})
查詢時不區分大小寫,只要包含b或B都能查詢出來
db.c1.find({name:{ r e g e x : / b / , regex:/b/, regex:/b/,options:“i”}});
條件操作符用于比較兩個表達式并從mongoDB集合中獲取數據。
語法格式:find({鍵:{操作符:條件}})或者findOne({鍵:{操作符:條件}})
(>) 大于操作符,greater than 縮寫。用right記憶,表示右側角括號。
查詢所有年齡大于10的文檔對象
db.c1.find({age:{$gt:10}});
(<) 小于操作符。less than縮寫,用left記憶,左角括號
查詢所有年齡小于10的文檔對象
db.c1.find({age:{$lt:10}});
(==)等于操作符,equals
查詢年齡等于8
db.c1.find({age:{$eq:8}});
等效于
db.c1.find({age:8});
(!=)不等操作符 not equals
查詢所有年齡不是18歲的,包含了age屬性沒有值的文檔對象。
db.c1.find({age:{$ne:8}});
(>=)大于或等于操作符greater than equals
查詢所有年齡大于等于8的文檔對象。如果文檔沒有age屬性無法被查詢。
db.c1.find({age:{$gte:8}});
(<=)小于或等于操作符less than equals
查詢小于等于8的文檔對象。
db.c1.find({age:{$lte:8}});
我們可以使用 i n 操 作 符 來 表 示 多 條 件 查 詢 , in操作符來表示多條件查詢, in操作符來表示多條件查詢,in中多條件的關系為或者關系,只要滿足其中一個就能被查詢出來,由于$in取值為多個,所以是數組類型。
查詢年齡為8或10或12的文檔對象
db.c1.find({age:{$in:[8,10,12]}})
not in,與$in的結果取反。
只要age不是8或10或12的文檔對象都能查詢出來。
db.c1.find({age:{$nin:[8,10,12]}})
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。