1. 程式人生 > >MongoDB入門系列(二):Insert、Update、Delete、Drop

MongoDB入門系列(二):Insert、Update、Delete、Drop

概述  

本章節介紹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({});

注意:針對大表清空所有資料慎重使用remove({}),會非常的慢,而且對伺服器的壓力也非常的大,可以選擇drop操作。

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()

總結

備註:

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》