基礎學習MongoDB(五)—— 文檔CRUD操作丨【綻放吧!數據庫】

      網友投稿 908 2022-05-29

      一、插入數據

      1.1 插入單條文檔

      語法格式:db.collectionName.insert(文檔)

      db是當前操作的數據庫

      collectionName是操作的集合,沒有會自動創建

      插入的文檔如果沒有_id屬性,會自動創建

      例如在user集合下插入單個文檔

      db.user.insert({name:"ljc",love:["soccer","music"]})

      在可視化工具中實操的結果,在命令行中結果一致!

      在 MongoDB3.2 之后的版本中,提供了 insertOne()函數用于插入文檔,同時廢棄了save函數,因此就不學習它了,它的使用方法和insert相同

      語法格式:db.COLLECTION_NAME.insertOne(document)

      例如在user集合下插入單個文檔

      db.user.insertOne({name:"ddd",love:["play game","running"]})

      在可視化工具中實操的結果,在命令行中結果一致!

      1.2 插入多條文檔

      向集合中批量插入多個文檔時,需要使用數組來存放文檔

      語法格式:db.COLLECTION_NAME.insert([{},{},{}…])

      例如采用insert在user中批量插入人員信息

      db.user.insert([{name:"張三",age:"18"},{name:"李四",age:"19"}])

      語法格式:db.COLLECTION_NAME.insertMany([{},{},{}…])

      例如采用insertMany在user中批量插入人員信息

      db.user.insertMany([{name:"王五",age:"28"},{name:"唐六",age:"29"}])

      1.3 tips

      db.COLLECTION_NAME.insertOne(document) db.COLLECTION_NAME.insertMany(document) db.COLLECTION_NAME.replaceOne(document)

      參數說明

      document:要寫入的文檔

      writeConcern:寫入策略,默認為 1,即要求確認寫操作,0 是不要求

      ordered:指定是否按順序寫入,默認 true,按順序寫入

      二、更新文檔

      MongoDB通過update函數或者save函數來更新集合中的文檔。

      2.1 update 函數

      update() 函數用于更新已存在的文檔。

      語法格式為:

      db.COLLECTION_NAME.update(query,update,options)

      query : update的查詢條件,根據這個來選擇需要更新的數據

      update:update的對象和一些更新的操作符

      upsert:可選參數,意思是如果不存在需要更新的數據,是否要作為新數據插入集合中,參數值為true或者false,默認值是false,不插入

      multi:可選參數,是否批量更新,意思是當查詢到多個符合查詢條件的數據時,是否要全部更新,還是只更新第一條,默認是false

      writeConcern:可選參數,拋出異常的級別

      實操

      首先我們在user集合下插入一些數據

      db.user.insertMany([{title:"html",page:300},{title:"css",page:300},{title:"js",page:200},{title:"ts",page:250},{title:"webpack",page:220}])

      插入成功

      接下來我們來對集合中的數據進行更新

      第一個需求:將html的page改成500

      db.user.update({title:"html"},{title:"html",page:500})

      特別注意:更新文檔是更新整個文檔的操作,即使只需要修改一個值,其他屬性一樣需要寫下來,不然其他屬性將被刪除

      第二個需求:將所有page為200的改為400

      db.user.update({page:200},{$set:{page:400}},{multi:true})

      操作結果

      在上面采用了$set操作符,用來只更新數據中的某個屬性

      2.2 updateOne 和updateMany

      db.collection.updateOne() 向指定集合更新單個文檔

      db.collection.updateMany() 向指定集合更新多個文檔

      2.3 更新操作符

      用來指定一個鍵并更新鍵值,若鍵不存在則創建。也就是我們可以通過這個操作符,指定我們需要修改的屬性,而不用更新整個文檔

      語法格式:db.COLLECTION_NAME.update({查詢條件},{更新操作符:{更新內容}})

      將html改成html5

      db.user.update({title:"html"},{$set:{title:"html5"}});

      這樣我們就將查找到的文檔中的某個數據修改,而不刪除其他數據

      如果數據未被找到,則新建新增數據

      對文檔中滿足要求的數字型的值進行增減操作,正則增,負則減

      db.user.updateOne({title:"js"},{$inc:{page:-20}})

      將title為js的數據的page屬性進行減20的操作

      用來刪除鍵,讓鍵的值為空。在編寫命令時$unset里更改數據取值任意,無論給定什么值都表示刪除。

      刪除html的page

      db.user.update({title:"html"},{$unset:{page:"aaaa"}});

      這里插入一個點:如果需要更改全部數據,我們的query屬性填{}即可,也就是查找全部

      向文檔的某個數組類型的鍵添加一個數組元素,不過濾重復的數據。鍵不存在,則創建數組類型的鍵

      給所有的文檔添加一個auth字段,值為ljc

      db.user.update({},{$push:{auth:"ljc"}},{multi:true});

      從結果來看是添加成功,需要注意的是,數組,數組,數組!

      刪除數據中數組元素,取值只能是1或-1,1表示尾部刪除,-1表示頭部刪除

      首先我們先push一下,讓數組豐富一點,給html添加多一個auth

      db.user.update({title:"html"},{$push:{auth:"htmlauth"}});

      接下來演示pop操作,刪除html中auth數組的第一個值

      db.user.update({title:"html"},{$pop:{auth:-1}})

      從數組中刪除滿足條件的元素,只要滿足條件都刪除

      刪除auth數組中元素內容為ljc

      db.user.update({title:"js"},{$pull:{auth:"ljc"}})

      可以同時刪除數組中的多個值

      將ts中auth中ljc以及ccc刪除掉

      db.user.update({title:"ts"},{$pullAll:{auth:["ljc","ccc"]});

      對鍵進行重新命名。任何類型的鍵都能重命名

      將所有title的屬性名改成name

      db.user.update({},{$rename:{title:"name"}},{multi:true})

      成功將改成了name

      三、刪除文檔

      3.1 remove 函數

      語法格式:

      零基礎學習MongoDB(五)—— 文檔CRUD操作丨【綻放吧!數據庫】

      db.user.remove(,{justOne:})

      參數說明:

      query:可選刪除的文檔條件

      justOne:刪除多個或者一個文檔。true只刪除一個,false刪除所有匹配的數據

      刪除name值為html的文檔

      db.user.remove({name:"html"},{justOne:true})

      成功刪除

      刪除所有數據

      db.user.remove({})

      注意:remove豐富不會真正的釋放空間,需要執行db.repairDatabase()來回收磁盤空間

      3.2 deleteOne 函數

      該方法只刪除滿足條件的第一條文檔,相對于remove簡潔了很多

      刪除js

      db.user.deleteOne({name:"js"})

      3.3 deleteMany 函數

      刪除滿足條件的所有文檔

      刪除所有page為200的文檔

      db.user.deleteMany({page:200})

      四、查詢文檔

      查詢文檔采用find函數

      語法格式

      db.collection.find(query, projection)

      query :可選,指定查詢的條件

      projection :可選,使用投影操作符指定返回的鍵

      **注意:**可以通過db.collection.find().pretty()方法以易讀的方式來讀取數據

      同樣的可以使用findOne方法,返回一個文檔

      4.1 查詢所有

      查詢所有文檔

      db.user.find({})

      根據名字去重

      db.user.distinct("name")

      注意:MongoDB中使用方法一般都要$號開頭

      4.2 條件操作符

      采用條件操作符用于比較兩個表達式,再從集合中獲取數據

      語法格式:find({鍵:{操作符:條件}})

      findOne也可以噢~

      等于操作符

      查詢所有page為300的文檔對象

      db.user.find({page:{$eq:300}})

      小于操作符

      查詢page小于300的文檔對象

      db.user.find({page:{$lt:300}})

      小于或等于操作符

      查詢page小于等于300的文檔對象

      db.user.find({page:{$lte:300}})

      大于操作符

      查詢page大于250的文檔對象

      db.user.find({page:{$gt:250}})

      大于等于操作符

      查詢page大于等于300的文檔對象

      db.user.find({page:{$gte:300}})

      不等于操作符

      查詢page不等于300的文檔對象

      db.user.find({page:{$ne:300}})

      多條件查詢,只要滿足in中其中一個條件,就能被查詢出來

      查詢page為220和300的文檔對象

      db.user.find({page:{$in:[300,220]}})

      注意:$in后面的值是一個數組類型!!

      于in相反,除了in中的都查詢出來

      查詢page不為220和300的文檔對象

      db.user.find({page:{$nin:[300,220]}})

      查找同時滿足多個條件的文檔對象

      語法格式:

      db.col.find({$and:[{條件一},{,條件二},…]})

      查詢page為300并且name值為node的文檔

      db.user.find({$and:[{name:"node"},{page:300}]})

      當同時指定多個查詢條件時,默認是并列關系,因此我們可以直接寫

      db.user.find({name:"node"},{page:300})

      查詢至少滿足多個條件中其中一個的文檔對象

      查詢page為300或者name值為node的文檔

      db.user.find({$or:[{name:"node"},{page:300}]})

      根據值類型來查詢

      查詢page為的值類型為number的值

      db.user.find({page:{$type:"number"}})

      ~數據類型如下,來自菜鳥教程~

      可以使用類型對應的數字來指定

      db.col.find({"title" : {$type : 2}}) 等價于 db.col.find({"title" : {$type : 'string'}})

      4.3 正則查詢

      利用正則表達式來查詢特定格式的文檔

      查詢name以s結尾,不區分大小寫的文檔

      db.user.find({name:/s$/i})

      4.4 投影查詢

      只選擇文檔中的部分數據,而不是整個文檔全部數據

      在find()方法中默認會顯示一個文檔中的全部字段,要限制這點只需要設置字段列表值0或1

      只顯示name值,同時不顯示_id

      db.user.find({},{_id:0,name:1})

      顯示name和page

      db.user.find({},{page:1,name:1})

      注意:_id字段是默認存在的!!

      不顯示name和page

      db.user.find({},{page:0,name:0})

      特別注意

      :只有在設置_id:0,的情況下才允許屬性值不同,也就是對于除_id以外的數據,不允許同時一個設置1,一個設置0

      例如:

      db.user.find({},{_id:0,page:1,name:0})

      報錯

      4.5 數組查詢

      在我們的數據集中,常常會有數組的存在,因此,查詢數組也是很重要的

      查詢auth數組中有ljc的文檔

      db.user.find({auth:"ljc"})

      查詢auth數組中既有ljc又有cssauth的文檔

      db.user.find({auth:{$all:["ljc","cssauth"]}})

      查詢auth數組中第二個元素為ljc的文檔

      通過auth.1來指定數組的第二個元素

      db.user.find({"auth.1":"ljc"})

      查詢auth數組中第一個到第二個元素(其他字段保留)

      db.user.find({},{auth:{$slice:[0,2]}})

      查詢auth數組中最后一個元素

      db.user.find({},{auth:{$slice:-1}})

      4.6 排序

      采用sort方法,根據數據進行排序,使用1和-1來指定排序方式為升序還是降序

      根據page有小到大進行排序

      db.user.find().sort({page:1})

      4.7 分頁

      使用limit()方法來讀取指定數量的數據外,再使用skip()方法來跳過指定數量的數據

      語法格式:

      db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

      實例

      db.user.find.limit(2).skip(0) #前兩個 db.user.find.limit(2).skip(2) #3,4

      4.8 統計

      count用來計算符合條件的值有多少個

      統計page中小于270的有多少個

      db.user.count({"page":{$lt:270}})

      【綻放吧!數據庫】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/285617

      MongoDB 數據庫 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:企業面臨大危機,CRM崩潰告急,程序員竟用特殊手段化解危機!
      下一篇:多線程同步:互斥對象、事件對象、關鍵代碼段
      相關文章
      亚洲国产精品99久久久久久| 亚洲福利一区二区三区| 亚洲自偷精品视频自拍| 亚洲国产a∨无码中文777| 亚洲精品高清一二区久久| 久久久久久亚洲精品无码| 亚洲人AV在线无码影院观看| 亚洲永久在线观看| 亚洲综合av一区二区三区| 国产成人精品日本亚洲专一区| 精品丝袜国产自在线拍亚洲| 国产亚洲精品成人AA片| 亚洲一级特黄特黄的大片 | 亚洲乱码在线观看| 456亚洲人成影院在线观| 亚洲精品第一国产综合野| 亚洲jjzzjjzz在线播放| 456亚洲人成在线播放网站| 亚洲综合精品第一页| 亚洲国产成人AV在线播放| 亚洲国产成人手机在线观看| 无码专区一va亚洲v专区在线| 国产精品亚洲а∨无码播放不卡| 国产亚洲精品第一综合| 亚洲天堂免费在线视频| 国产亚洲欧洲Aⅴ综合一区 | 亚洲自偷自偷偷色无码中文| 亚洲日产无码中文字幕| 亚洲成亚洲乱码一二三四区软件| 亚洲成人精品久久| 亚洲精品国产成人中文| ASS亚洲熟妇毛茸茸PICS| 亚洲国产精品99久久久久久| 国产成人综合亚洲一区| 亚洲一级片免费看| 久久精品国产亚洲麻豆| 亚洲第一中文字幕| 亚洲av永久无码精品天堂久久 | 国产亚洲福利精品一区| 亚洲午夜未满十八勿入| 亚洲三级视频在线观看|