[MongoDB] - 數據的增刪改操作


  在前一篇中簡單的介紹了一些基本操作命令,現在分別針對這些命令進行比較詳細的說明:


一、數據插入

  插入數據使用命令insert,insert的參數只有一個,就是要插入的文檔BSON數據。MongoDB的shell客戶端沒有提供批量插入的api,如果需要批量插入,那么需要使用javascript腳本來插入數據。

db.users.insert({name:"tom",pwd:"123",sex:"m"})                     #### 單獨的插入數據
for(var i=0;i<100;i++){db.users.insert({name:"tom"+i,pwd:""+i})} #### 批量插入數據

  除了使用insert可以插入數據外,使用save命令也可以插入數據,save也只有一個參數。

db.users.save({_id:ObjectId("012345678901234567890123"),name:"lili"})

   save和insert的區別:當遇到唯一索引key相同的情況下,save操作是進行強制更新,就是刪除在重建,但是insert會報錯。

db.users.insert({_id:ObjectId("012345678901234567890123"),name:"lili2",pwd:"123"})  #### 會出現異常,E11000 duplicate key error index
db.users.save({_id:ObjectId("012345678901234567890123"),name:"lili2",pwd:"123"})

 

二、刪除文檔

  刪除文檔只有命令remove,remove有且只有一個參數,remove方法會刪除匹配的所有文檔。如果當需要刪除集合中的所有文檔數據的時候,建立直接使用drop方法。

db.users.remove({name:"lili2"})    ### 刪除姓名為lili2的user

 

三、更新文檔

  更新文檔命令為update,update方法參數格式為:

db.[collectionName].update(查詢器,更新器,是否插入,是否批量)

  默認情況下,更新操作只有當查詢器查到數據后,才會更新,那么可以設置當不存在數據則插入(第三個參數為true);更新操作只更新第一個匹配的記錄,可以設置第四個參數為true進行批量更新。

  如果在更新器中我們不使用修改器,那么進行的是強制更新,即先刪除在添加的操作(一條記錄),而且如果使用第四個參數,那么必須使用修改器即:

db.users.update({name:"lili"},{age:23})    #### 結果是修改的記錄沒有了其他的屬性,只有age。
db.users.update({name:"lili"},{$set:{age:23}}) #### 正常,添加一個age

   常用修改器:

 

修改器名稱

語法

案例

$set

{$set:{field:value[,field2:value2....]}}

db.users.update({},{$:{name:1}})

$set用來指定一個鍵值對,如果鍵存在就進行修改,如果不存在,那么進行插入。

$inc

{$inc:{field:value}}

db.users.update({},{$inc:{age:1}})

$inc只能與數字類型結合使用,作用是為指定鍵對應的數字類型的數值添加/或者減少操作。

$unset

{$unset:{field:1}}

db.users.update({},{$unset:{email:1}})

刪除指定鍵

$push

{$push:{field:value}}

db.users.update({},{$push:{books:””}})

1、如果指定的鍵是數組,則追加value到數組中去。
2、如果指定的鍵不是數組,那么中斷當前操作Cannot apply $push/$pushAll modifier to non-array

3、如果不存在指定鍵,那么新建一個指定鍵的數組鍵值對

$pushAll

{$pushAll:{field:array}}

db.users.update({},{$push:{books:[]}})

用法和push一樣,插入全部數據

$addToSet

{$addToSet:{field:value}}

db.users.update({},{$addToSet:{ips:”127.0.0.1”}})

如果鍵不存在,則創建。如果鍵存在,那么判斷指定的value是否在值中,如果在,那么不操作,如果不在,那么添加進入。如果指定的鍵不是array類型的鍵,那么中斷報錯。

$pop

{$pop:{field:value}}

db.users.update({},{$pop:{books:1}})

從指定數組中刪除一個值,1表示刪除最后一個值,-1表示刪除第一個值。

$pull

{$pull:{field:value}}

db.users.update({},{$pull:{books””js”}})

刪除一個指定值

$pullAll

{$pullAll:{field:array}}

Db.users.update({},{$pullAll:{books:[“js”,”mongo”]}})

一次刪除多個值

$

 

 

數組定位器,如果數組有多個數值,但是我們只想將其中一部分數據進行修改,那么我們可能就需要使用到定位器($).

例如:當有文檔{name:YFC,age:27,books:[{type:JS,name:EXTJS4},{type:JS,name:JQUERY},{type:DB,name:MONGODB}]}我們要把typeJS的文檔增加一個相同的作者authUPSCAT

辦法:

db.users.update({"books.type":"JS"},{$set:{"books.$.author":"uspcat"}})

$each

{$each:array}

 

$eacharray中的元素一個一個的循環拿出,可以到$addToSet修改器配合完成,將不存在的元素添加,存在的元素不添加的功能。即$addToSetAll的功能(不存在這個修改器)

db.users.update({},{$addToSet:{books:{$each:[{type:"java",name:"spring"},{type:"db",name:"mongodb"}]}}},false,true)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM