Python全栈 MongoDB 数据库(数据的修改)
生活随笔
收集整理的這篇文章主要介紹了
Python全栈 MongoDB 数据库(数据的修改)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
修改操作符的使用
$set 修改一個域的值,增加一個域
阿哲年齡修改為33 db.class1.update({name:'阿哲'},{$set:{age:33}})
如果sex域不存在則會添加這個域 db.class1.update({name:'阿蓉'},{$set:{sex:'w'}})
$unset 刪除一個域
刪除sex域 db.class1.update({name:'小陳'},{$unset:{sex:''}})
* 每個操作符可以同時操作多項 db.class1.update({name:'陳'},{$set:{age:36,sex:'m'}})
* 一次修改可以同時使用多個操作符 db.class1.update({name:'阿寶'},{$set:{name:'老王'},$unset:{sex:''}})
$rename 修改域名
將sex域名改為gender db.class1.update({sex:{$exists:true}},{$rename:{sex:'gender'}},false,true)
$setOnInsert 如果第三個參數為true且插入數據,則表示插入文檔的補充內容。如果不插入文檔則不起作用
如果插入新文檔則setOnInsert中鍵值對也作為文檔內容 db.class1.update({name:'阿文'},{$set:{age:32},$setOnInsert:{gender:'m'}},true)
$inc 加減修改器 db.class1.update({},{$inc:{age:-1}},false,true)
$mul 乘法修改器 db.class2.update({},{$mul:{age:2}},false,true)
* $inc? ?$mul? 參數可以使整數小數正數負數
$min? 如果篩選文檔指定域的值小于min值則不修改,大于min值則修改為min值
如果age大于18則修改為18 db.class2.update({},{$min:{age:18}},false,true)
$max 如果篩選文檔指定域的值大于max值則不修改,小于max值則修改為max值
將年齡不到30的修改為30 db.class1.update({},{$max:{age:30}},false,true)
數組修改器
$push 向數組中添加一項
向score數組中添加一項 db.class2.update({name:'小亮'},{$push:{score:91}})
$pushAll 向數組中添加多項 db.class2.update({name:'小明'},{$pushAll:{score:[5,10]}})
$pull 從數組中刪除一項 db.class2.update({name:'小明'},{$pull:{score:10}})
$pullAll 從數組中刪除多項 db.class2.update({name:'小明'},{$pullAll:{score:[58,5]}})
$each?? 對多個值進行逐一操作 db.class2.update({name:'小明'},{$push:{score:{$each:[60,10]}}})
$position?? 指定插入位置
配合each使用將數據插入到指定位置 db.class2.update({name:'小紅'},{$push:{score:{$each:[5],$position:1}}})
$sort?? 對數組進行排序
對數組進行排序 db.class2.update({name:'小明'},{$push:{score:{$each:[],$sort:1}}})
$pop? 彈出一項
1表示彈出數組中最后一項,-1表示彈出第一項 db.class2.update({name:'小明'},{$pop:{score:-1}})
$addToSet 向數組中添加一項,但是不允許添加重復內容
如果數組中沒有80則添加80 db.class2.update({name:'小紅'},{$addToSet:{score:80}})
時間類型
mongodb 中支持時間格式 : ISODate()
1. 使用new Date() 自動生成當前時間 db.class0.insert({book:'Python入門',date:new Date()})
2. 使用 ISODate() 生成當前時間 db.class0.insert({book:'Python精通',date:ISODate()})
3. 獲取計算機時間生成時間格式字符串 Date() db.class0.insert({book:'Python瘋狂',date:Date()}) 指定時間: ISODate() 功能: 生成mongodb時間存儲類型 參數: 不加參數生成當前時間 指定時間格式參數: "2018-01-01 12:12:12" "20180101 12:12:12" "20180101" db.class0.insert({book:'Python崩潰',date:ISODate("2018-07-13 11:23:36")})
時間戳: 通過當前的時間生成的一個時間節點標志
valueOf() 生成某個標準時間的時間戳 db.class0.insert({book:'Python重生',date:ISODate().valueOf()})
Null 類型:
值 : null??
1. 如果某個域存在卻沒有值可以設置為null
表示date沒有實際意義的值 db.class0.insert({book:'Python編程',date:null})
2. 在查找時可以找到值為null或者不存在某個域的文檔
查找到date值為null或者不存在date域的文檔 db.class0.find({date:null},{_id:0})
數組的下標操作方式: 可以通過? 域名.下標? 的方式具體操作數組的某一項
查找數組 0 項大于90的文檔 db.class2.find({'score.0':{$gt:90}},{_id:0})
將score 第1項改為10 db.class2.update({name:'小紅'},{$set:{'score.1':10}})
內部文檔操作(Object): 文檔內部某個域的值還是一個文檔,則這個文檔稱為內部文檔類型數據
* 通過? 外部域.內部文檔域? 的方式引用內部文檔中某個域的值進行操作 db.class3.find({'books.title':'狂人日記'},{_id:0})
db.class3.update({"books.title":'駱駝祥子'},{$set:{"books.price":48.6}})
查找結果的下標引用 可以通過下標的方式獲取查找結果的某一項
獲取查找結果的 第 2 項 db.class1.find({},{_id:0})[2]
綜合示例 :? 使用之前的grade數據庫
1.將小紅年齡改為8歲,興趣愛好變為跳舞畫畫 db.class.update({$set:{age:8,hobby:['dance','draw']}})
2. 追加小明興趣愛好 唱歌 db.class.update({$push:{hobby:'sing'}})
3. 追加小王興趣愛好,吹牛,打籃球 db.class.update({$pushAll:{hobby:['吹牛','basketball']}})
4. 小李興趣多了跑步唱歌,但是要確保不和以前的重復 db.class.update({$addToSet:{hobby:{$each:['running','sing']}}})
5. 將該班所有同學年齡加1 db.class.update({},{$inc:{age:1}},false,ture)
6. 刪除小明的sex屬性 db.class.update({$unset:{sex:''}})
7.刪除小李興趣中的第一項 db.class.update({$pop:{hobby:-1}})
8,刪除小紅興趣中的畫畫和唱歌 db.class.update({$pullAll:{hobby:['draw','sing']}})
9. 為小紅增加一個域,為? score:{english:93,chinese:92,match:78} db.class.update({$set:{score:{english:93,chinese:92,match:78}}})
10. 給小紅數學成績加5分 db.class.update({$inc:{'score.math':5}})
11. 小明的第一愛好改為computer db.class.update({$set:{'hobby.0':'computer'}})
索引: 指建立指定鍵值及所在文檔中存儲位置的對照清單, 使用索引可以方便我們進行快速查找,減少數據遍歷次數,從而提高查找效率
Mongodb創建索引: ensureIndex() 功能 :? 創建索引 參數 :? 第一個為對哪個域創建索引 第二個為索引的選項 對name域創建索引 db.class1.ensureIndex({name:1}) * 1表示正向索引? -1表示逆向索引
查看某個集合中的索引: db.class1.getIndexes() * _id是系統為每個集合自動創建的索引
自定義索引名稱 通過第二個參數傳入索引選項實現 db.class1.ensureIndex({age:1},{name:'ageIndex'}) * 同一個域不能重復創建相同的索引,一個集合中索引名也不要相同
刪除索引: dropIndex() 功能:? 刪除一個索引 參數:? 索引名或者索引鍵值對
db.class1.dropIndex({name:-1}) db.class1.dropIndex("ageIndex")
dropIndexes() 功能: 刪除所有索引
刪除class1中所有索引,但是不會刪除_id索引 db.class1.dropIndexes()
其他索引類型:
復合索引: 同時根據多個域創建一個索引
根據name和age域查詢都為索引查詢,比單獨創建兩個索引表更節省空間 db.class1.ensureIndex({name:1,age:-1})
數組和子文檔索引: 如果對某個數組和子文檔域創建索引,那么根據數組和子文檔的查找均為索引查找
如果對score域創建索引則 下面的查找也是索引查找 db.class2.find({'score.0':60},{_id:0})
覆蓋索引: 查找操作需要獲取的域,只有索引域沒有其他域。 此時索引表可以直接提供給用戶想要的內容,提高查找效率
唯一索引: 創建的索引,索引域值無重復,此時可以創建唯一索引 唯一索引數據結構更加便于查找
對name創建唯一索引,name值不能有重復 db.class1.ensureIndex({name:1},{unique:true})
* 當對某個域創建唯一索引,該域就不能再插入重復數據
稀疏索引: 只針對有指定域的文檔創建索引表,如果某個文檔沒有該域則不會插入到索引表中
對age創建稀疏索引 db.class1.ensureIndex({age:1},{sparse:true})
索引約束: 1. 索引表也需要占用一定的磁盤空間 2. 當數據發生更新時索引表也要隨之更新
綜上:? 1. 數據量比較大時更適合創建索引,數據量較小時沒有必要付出索引代價 2. 頻繁進行查找操作而不是更新刪除插入操作,此時更適合使用索引
固定集合: mongodb中可以創建大小固定的集合,稱之為固定集合。
特點:?? 1.插入速度更快,順序查找更快 2.可以控制集合的空間大小 3.能夠自動淘汰早期數據
使用:? 日志處理 臨時緩存
創建: db.createCollection(collection,{capped:true,size:10000,max:1000}) 參數: capped:true: 創建固定集合 size:10000: 固定集合的大小? 字節數 max :1000: 表示最多多少條文檔
創建一個固定集合 db.createCollection('log',{capped:true,size:10000,max:3})
$set 修改一個域的值,增加一個域
阿哲年齡修改為33 db.class1.update({name:'阿哲'},{$set:{age:33}})
如果sex域不存在則會添加這個域 db.class1.update({name:'阿蓉'},{$set:{sex:'w'}})
$unset 刪除一個域
刪除sex域 db.class1.update({name:'小陳'},{$unset:{sex:''}})
* 每個操作符可以同時操作多項 db.class1.update({name:'陳'},{$set:{age:36,sex:'m'}})
* 一次修改可以同時使用多個操作符 db.class1.update({name:'阿寶'},{$set:{name:'老王'},$unset:{sex:''}})
$rename 修改域名
將sex域名改為gender db.class1.update({sex:{$exists:true}},{$rename:{sex:'gender'}},false,true)
$setOnInsert 如果第三個參數為true且插入數據,則表示插入文檔的補充內容。如果不插入文檔則不起作用
如果插入新文檔則setOnInsert中鍵值對也作為文檔內容 db.class1.update({name:'阿文'},{$set:{age:32},$setOnInsert:{gender:'m'}},true)
$inc 加減修改器 db.class1.update({},{$inc:{age:-1}},false,true)
$mul 乘法修改器 db.class2.update({},{$mul:{age:2}},false,true)
* $inc? ?$mul? 參數可以使整數小數正數負數
$min? 如果篩選文檔指定域的值小于min值則不修改,大于min值則修改為min值
如果age大于18則修改為18 db.class2.update({},{$min:{age:18}},false,true)
$max 如果篩選文檔指定域的值大于max值則不修改,小于max值則修改為max值
將年齡不到30的修改為30 db.class1.update({},{$max:{age:30}},false,true)
數組修改器
$push 向數組中添加一項
向score數組中添加一項 db.class2.update({name:'小亮'},{$push:{score:91}})
$pushAll 向數組中添加多項 db.class2.update({name:'小明'},{$pushAll:{score:[5,10]}})
$pull 從數組中刪除一項 db.class2.update({name:'小明'},{$pull:{score:10}})
$pullAll 從數組中刪除多項 db.class2.update({name:'小明'},{$pullAll:{score:[58,5]}})
$each?? 對多個值進行逐一操作 db.class2.update({name:'小明'},{$push:{score:{$each:[60,10]}}})
$position?? 指定插入位置
配合each使用將數據插入到指定位置 db.class2.update({name:'小紅'},{$push:{score:{$each:[5],$position:1}}})
$sort?? 對數組進行排序
對數組進行排序 db.class2.update({name:'小明'},{$push:{score:{$each:[],$sort:1}}})
$pop? 彈出一項
1表示彈出數組中最后一項,-1表示彈出第一項 db.class2.update({name:'小明'},{$pop:{score:-1}})
$addToSet 向數組中添加一項,但是不允許添加重復內容
如果數組中沒有80則添加80 db.class2.update({name:'小紅'},{$addToSet:{score:80}})
時間類型
mongodb 中支持時間格式 : ISODate()
1. 使用new Date() 自動生成當前時間 db.class0.insert({book:'Python入門',date:new Date()})
2. 使用 ISODate() 生成當前時間 db.class0.insert({book:'Python精通',date:ISODate()})
3. 獲取計算機時間生成時間格式字符串 Date() db.class0.insert({book:'Python瘋狂',date:Date()}) 指定時間: ISODate() 功能: 生成mongodb時間存儲類型 參數: 不加參數生成當前時間 指定時間格式參數: "2018-01-01 12:12:12" "20180101 12:12:12" "20180101" db.class0.insert({book:'Python崩潰',date:ISODate("2018-07-13 11:23:36")})
時間戳: 通過當前的時間生成的一個時間節點標志
valueOf() 生成某個標準時間的時間戳 db.class0.insert({book:'Python重生',date:ISODate().valueOf()})
Null 類型:
值 : null??
1. 如果某個域存在卻沒有值可以設置為null
表示date沒有實際意義的值 db.class0.insert({book:'Python編程',date:null})
2. 在查找時可以找到值為null或者不存在某個域的文檔
查找到date值為null或者不存在date域的文檔 db.class0.find({date:null},{_id:0})
數組的下標操作方式: 可以通過? 域名.下標? 的方式具體操作數組的某一項
查找數組 0 項大于90的文檔 db.class2.find({'score.0':{$gt:90}},{_id:0})
將score 第1項改為10 db.class2.update({name:'小紅'},{$set:{'score.1':10}})
內部文檔操作(Object): 文檔內部某個域的值還是一個文檔,則這個文檔稱為內部文檔類型數據
* 通過? 外部域.內部文檔域? 的方式引用內部文檔中某個域的值進行操作 db.class3.find({'books.title':'狂人日記'},{_id:0})
db.class3.update({"books.title":'駱駝祥子'},{$set:{"books.price":48.6}})
查找結果的下標引用 可以通過下標的方式獲取查找結果的某一項
獲取查找結果的 第 2 項 db.class1.find({},{_id:0})[2]
綜合示例 :? 使用之前的grade數據庫
1.將小紅年齡改為8歲,興趣愛好變為跳舞畫畫 db.class.update({$set:{age:8,hobby:['dance','draw']}})
2. 追加小明興趣愛好 唱歌 db.class.update({$push:{hobby:'sing'}})
3. 追加小王興趣愛好,吹牛,打籃球 db.class.update({$pushAll:{hobby:['吹牛','basketball']}})
4. 小李興趣多了跑步唱歌,但是要確保不和以前的重復 db.class.update({$addToSet:{hobby:{$each:['running','sing']}}})
5. 將該班所有同學年齡加1 db.class.update({},{$inc:{age:1}},false,ture)
6. 刪除小明的sex屬性 db.class.update({$unset:{sex:''}})
7.刪除小李興趣中的第一項 db.class.update({$pop:{hobby:-1}})
8,刪除小紅興趣中的畫畫和唱歌 db.class.update({$pullAll:{hobby:['draw','sing']}})
9. 為小紅增加一個域,為? score:{english:93,chinese:92,match:78} db.class.update({$set:{score:{english:93,chinese:92,match:78}}})
10. 給小紅數學成績加5分 db.class.update({$inc:{'score.math':5}})
11. 小明的第一愛好改為computer db.class.update({$set:{'hobby.0':'computer'}})
索引: 指建立指定鍵值及所在文檔中存儲位置的對照清單, 使用索引可以方便我們進行快速查找,減少數據遍歷次數,從而提高查找效率
Mongodb創建索引: ensureIndex() 功能 :? 創建索引 參數 :? 第一個為對哪個域創建索引 第二個為索引的選項 對name域創建索引 db.class1.ensureIndex({name:1}) * 1表示正向索引? -1表示逆向索引
查看某個集合中的索引: db.class1.getIndexes() * _id是系統為每個集合自動創建的索引
自定義索引名稱 通過第二個參數傳入索引選項實現 db.class1.ensureIndex({age:1},{name:'ageIndex'}) * 同一個域不能重復創建相同的索引,一個集合中索引名也不要相同
刪除索引: dropIndex() 功能:? 刪除一個索引 參數:? 索引名或者索引鍵值對
db.class1.dropIndex({name:-1}) db.class1.dropIndex("ageIndex")
dropIndexes() 功能: 刪除所有索引
刪除class1中所有索引,但是不會刪除_id索引 db.class1.dropIndexes()
其他索引類型:
復合索引: 同時根據多個域創建一個索引
根據name和age域查詢都為索引查詢,比單獨創建兩個索引表更節省空間 db.class1.ensureIndex({name:1,age:-1})
數組和子文檔索引: 如果對某個數組和子文檔域創建索引,那么根據數組和子文檔的查找均為索引查找
如果對score域創建索引則 下面的查找也是索引查找 db.class2.find({'score.0':60},{_id:0})
覆蓋索引: 查找操作需要獲取的域,只有索引域沒有其他域。 此時索引表可以直接提供給用戶想要的內容,提高查找效率
唯一索引: 創建的索引,索引域值無重復,此時可以創建唯一索引 唯一索引數據結構更加便于查找
對name創建唯一索引,name值不能有重復 db.class1.ensureIndex({name:1},{unique:true})
* 當對某個域創建唯一索引,該域就不能再插入重復數據
稀疏索引: 只針對有指定域的文檔創建索引表,如果某個文檔沒有該域則不會插入到索引表中
對age創建稀疏索引 db.class1.ensureIndex({age:1},{sparse:true})
索引約束: 1. 索引表也需要占用一定的磁盤空間 2. 當數據發生更新時索引表也要隨之更新
綜上:? 1. 數據量比較大時更適合創建索引,數據量較小時沒有必要付出索引代價 2. 頻繁進行查找操作而不是更新刪除插入操作,此時更適合使用索引
固定集合: mongodb中可以創建大小固定的集合,稱之為固定集合。
特點:?? 1.插入速度更快,順序查找更快 2.可以控制集合的空間大小 3.能夠自動淘汰早期數據
使用:? 日志處理 臨時緩存
創建: db.createCollection(collection,{capped:true,size:10000,max:1000}) 參數: capped:true: 創建固定集合 size:10000: 固定集合的大小? 字節數 max :1000: 表示最多多少條文檔
創建一個固定集合 db.createCollection('log',{capped:true,size:10000,max:3})
總結
以上是生活随笔為你收集整理的Python全栈 MongoDB 数据库(数据的修改)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow模型保存和加载方法
- 下一篇: ThreadPoolExecutor的e