學習主題:MongoDb
學習目標:
- 掌握mongodb文檔的更新
- 掌握mongodb文檔的刪除
- 掌握mongodb文檔的查找
- 掌握mongodb文檔的條件操作符
- 掌握mongodb中的索引操作
- Mongodb的更新方式
- Update()函數更新
- Save()函數更新
Mongodb的update更新?
Update用于更新已存在的文檔(只更新更新內容中數據,文檔數據易丟失)
語法格式:db.COLLECTION_NAME.update({查詢條件},{更新內容},{更新參數(可選)})
Mongodb的更新操作符有哪些 都是什么意思?
$set (指定一個鍵,并更新鍵值,若不存在則創建)
db.dev.update({title:'語文小組'},{$set:{title:'物理小組'}})
使用multi參數實現批量更新操作
db.dev.update({title:'dev'},{$set:{size:'500'}},{multi:true})
$inc(數值類型):可以對文檔的某個值為數值型(只能為滿足要求的數字)的鍵進行增減操作
$unset 刪除鍵
$push (數組類型的鍵)
db.dev.update({title:'dev'},{$push:{tags:'JAVA 大數據 AI'}})
$pop:(刪除數據元素)
db.dev.update({title:'abc'},{$pop:{tags:1}}) //1表示從尾刪
db.dev.update({title:'abc'},{$pop:{tags:-1}} //-1表示從頭刪
$pull 從數組中刪除滿足條件的元素
db.dev.update({title:'abc'},{$pull:{tags:'34'}})
$pullAll 從數據中刪除滿足條件的多個元素
$rename 對鍵重新命名
Mongodb的save()更新?
Save()方法通過傳入的文檔來替換已有文檔
語法格式:save({文檔})
例如:修改title并刪除tag數組
db.dev.save({"_id" : ObjectId("5dbd292c503ed06c738dc15b"),title:'def'})
Mongodb刪除文檔的三種方式?
根據主鍵刪除文檔
db.dev.remove({"_id" : ObjectId("5dbd292c503ed06c738dc15b")})
如果使用的條件在集合中可以匹配多條數據,那么remove函數會刪除所以滿足條件的數據
db.dev.remove({title:"dev"},1)
Db.repairDatabase()回收磁盤空間(需要管理員賬戶)
DeleteOne()函數刪除一條文檔
DeleteMany()函數刪除多條文檔
刪除集合中的所有文檔
Remove({})
deleteMany({})
Mongodb如何實對文檔的查詢,請舉例說明?
使用find()函數查詢文檔
Find({查詢條件},{指定投影的鍵})
使用pretty()函數格式化顯示
FindOne({查詢條件},{指定投影的鍵}) 自帶格式化顯示
db.dev.find({title:/a/}) //查詢標題含有a內容
db.dev.find({title:/^a/}) //查詢以a開頭
db.dev.find({title:/a$/})//查詢以a結尾
Mongodb中的投影操作指的是?
投影鍵顯示該列查詢的結果
語法格式為:find({查詢條件},{投影鍵名:1(顯示該列)|0(不顯示該列)})
db.dev.find({title:"dev"},{title:1})
條件運算符有哪些 分別什么意思?
$gt 大于
db.dev.find({size:{$gt:300}})
$lt 小于
db.dev.find({size:{$lt:300}})
$gte 大于等于
$lte 小于等于
$eq 等于
$ne 不等于
$and 并且
db.dev.find({$and:[{size:{$gt:100}},{size:{$lt:400}}]})
$or 或者
db.dev.find({$or:[{title:{$eq:'test2'}},{size:{$gt:300}}]})
$type 類型檢索數據
db.dev.find({title:{$type:'number'}})
and和or如何聯合使用?
db.dev.find({$or:[{$and:[{title:{$eq:'test5'}},{size:500}]},{size:{$lt:400}}]})

每頁顯示5條查看第5頁的數據如何實現?
db.dev.find({},{title:1,_id:0}).skip(5).limit(5)
如何實現排序,兩個條件如何排序 如年齡一致按照分數排序?
db.dev.find({size:{$type:'number'}},{title:1,size:1,_id:0}).sort({size:1})
如何創建索引?
db.dec.createIndex({title:1},{background:true})
如何查看索引?
db.dev.getIndexes()
db.dev.getIndexSpecs()
db.dev.getIndexKeys()
刪除索引有幾種方式,分別舉例說明?
刪除全部索引
db.dev.dropIndexes()
刪除指定索引
db.dev.dropIndex(‘title_1’)
索引類型有哪些,有何作用?
單字段索引 在索引中只包含一個鍵,查詢時,可加速對該字段的各種查詢請求
交叉索引 一個集合的多個字段分別建立索引,在查詢的時候通過多個字段作為查詢條件。
復合索引 針對多個字段聯合創建索引,滿足多字段組合查詢,也滿足匹配符合索引前綴的查詢
多key索引 多key索引會為數組的每個元素建立一條索引
文本索引
部分索引
db.dev.createIndex({size:1},{partialFilterExpression:{size:{$gt:300}}})
使用索引需要注意什么?
創建索引需要在管理員admin數據庫下進行操作,不能有重復字段,出現重復字段則不能創建就會報錯。
索引額外屬性
db.dev.createIndex({title:1},{background:true,unique:true})
索引限制指的是?
額外開銷:每個索引占據一定的存儲空間,在進行插入,更新和刪除操作時也需要對索引進行操作。所以,如果你很少對集合進行讀取操作,建議不使用索引
內存(RAM)使用 由于索引是存儲在內存(RAM)中,你應該確保該索引的大小不超過內存的限制。
如果索引的大小大于內存的限制,MongoDB會刪除一些索引,這將導致性能下降
查詢限制
索引不能被以下的查詢使用:
正則表達式及非操作符,如 $nin, $not, 等。
算術運算符,如 $mod, 等。
$where 子句
所以,檢測你的語句是否使用索引是一個好的習慣,可以用explain來查看。
索引鍵限制
插入文檔超過索引鍵限制
如果文檔的索引字段值超過了索引鍵的限制,MongoDB不會將任何文檔轉換成索引的集合。與mongorestore和mongoimport工具類似。
最大范圍
集合中索引不能超過64個
索引名的長度不能超過128個字符
一個復合索引最多可以有31個字段