概述 本章節介紹Insert、Update、Delete、Drop操作基本語法。 環境: Version:3.4 insert insert()基本語法如下: db.collection.insert( <document or array of documents>, { writeConcern ...
概述
本章節介紹Insert、Update、Delete、Drop操作基本語法。
環境:
Version:3.4
insert
insert()基本語法如下:
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
1.單條插入
db.person.insert({"age":10})
2.多條插入
使用文檔數組作為參數,不過註意批量插入也會存在長度的限制
db.person.insert([{"age":11},{"age":12}])
3.錯誤的語法:
db.person.insert({"age":11},{"age":12})
只有age:11被插入進去,由於接收的插入文檔不是數組
容易誤導的地方:
db.person.insert([{"age":11},{"age":12}]) db.person.insert({"name":11,"age":12}) db.person.insert({"age":11,"age":12})
第一個插入是插入兩個文檔,第二個插入是插入一個文檔,第三個雖然也是一個文檔但是由於鍵重覆,所以只有後一個值會被插入age:12
delete
remove() 方法的基本語法格式如下所示:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> }
參數說明:
- query :(可選)刪除的文檔的條件。
- justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
- writeConcern :(可選)拋出異常的級別。
1.刪除num大於100的數據
db.new.remove({"num":{$gt:100}});
2.刪除new集合所有數據
db.new.remove({});
3.刪除num等於100的數據
db.new.remove({"num":100})
4.測試刪除速度
var timeRemoves = function(){ var start =(new Date()).getTime(); db.new.remove({'num':{$gt:100}}); db.new.findOne(); var timediff= (new Date()).getTime() - start; print("removeTimes: "+timediff+"ms") } timeRemoves()
update
update() 方法用於更新已存在的文檔。語法格式如下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
- query : update的查詢條件,類似sql update查詢內where後面的。
- update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
- upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
- multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
- writeConcern :可選,拋出異常的級別。
例:
db.person.insert([{"name":"chen","age":15},{"name":"li","age":20},{"name":"zhang","age":20}]);
$ set修改符
用於修改鍵的值,如果鍵不存在就增加鍵
//將age=10的數據改成15,預設如果age=10的有多條記錄只更新第一條
db.person.update({"name":"li"},{$set:{"age":10}})
//更新多個滿足條件的值,同時如果更新的值不存在就插入更新的值,註意:這裡插入的值是20不是30
db.person.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})
可以省略multi,upsert,這裡不能有花括弧,但是不建議這樣做
db.person.update({"age":30},{$set:{"age":20}},true,true)
//值更新為數組
db.person.update({"name":"zhang"},{$set:{"age":[10,12,14]}},{upsert:true})
//修改為其它的值
db.person.update({"name":"zhang"},{$set:{"age":''}},{upsert:true}) db.person.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})
$inc修改符
用於增加已有鍵的值,如果鍵不存在就創建,只能用於整形、長整型、浮點型。
//將name=zhang的記錄的age鍵+10
db.person.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})
//將name=zhang的記錄的age鍵-10
db.person.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})
$unset修改符
刪除鍵類似關係資料庫的刪除欄位操作,要區別$set修改符的將鍵設空或者null值
db.person.update({"name":"zhang"},{$unset:{"age":1}})
$push修改符
如果數組已經存在,“$push”會向已有的數組末尾加入一個元素,要是沒有就創建一個新的數組。註意:必須是數組才能加入新的值
db.person.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});
//再插入一條comments
db.person.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});
$each修改符
向數組中添加元素
db.axc.remove({}) db.axc.insert({"title":1,"list":[1,2,3]}) db.axc.find();
//向list數組中添加單個元素
db.axc.update({"title":1},{$push:{"list":4}})
//向list數組中添加多個元素
db.axc.update({"title":1},{$push:{"list":{$each:[6,7]}}}); db.axc.find();
$addToSet修改符
往數組集中插入元素時,如果元素存在就不插入;方法和$push一樣,唯一的區別就是$push不會判斷重覆值,重覆也可以插入。$addToSet也可以結合$each一起使用方法和$push一樣可以同時往數組中插入多個元素並且如果元素存在則不插入。
db.axc.update({"title":1},{$addToSet:{"list":2}}) db.axc.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});
$pull修改符
匹配數組中的元素將匹配上的元素全部刪除,註意只能對數組中的元素進行匹配
db.lists.insert({"title":1,"list":[1,2,3]}); db.lists.find();
//清除list數組中的元素2
db.lists.update({},{$pull:{"list":2}}) db.lists.find();
$pop修改符
從數組的末端或頭刪除一個元素,$pop:{"list":1}:從末尾刪除一個元素;$pop:{"list":-1}:從開頭刪除一個元素
//向數組list中插入兩個元素
db.lists.update({},{$push:{"list":{$each:[2,4]}}}); db.lists.find()
//從末尾刪除元素
db.lists.update({},{$pop:{"list":1}});
//從開頭刪除元素
db.lists.update({},{$pop:{"list":-1}});
基於位置的數組修改方法
可以有兩種方式來定位數組中的元素:
1.通過下標;數組的下標都是從0開始。
2.通過$定位操作符,
db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});
//將數組中的第一個列表的age值改成20
//方法1:
db.comment.update({},{$set:{"comments.0.age":20}});
//方法2:
db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});
drop
刪除test集合,註意drop後面的括弧裡面不需要帶花括弧
db.test.drop()
總結
備註: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。 《歡迎交流討論》 |