在前一篇中簡單的介紹了一些基本操作命令,現在分別針對這些命令進行比較詳細的說明:
一、數據插入
插入數據使用命令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到數組中去。 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”}]}我們要把type為JS的文檔增加一個相同的作者auth是UPSCAT 辦法: db.users.update({"books.type":"JS"},{$set:{"books.$.author":"uspcat"}}) |
||
$each |
{$each:array} |
|
$each將array中的元素一個一個的循環拿出,可以到$addToSet修改器配合完成,將不存在的元素添加,存在的元素不添加的功能。即$addToSetAll的功能(不存在這個修改器)。 db.users.update({},{$addToSet:{books:{$each:[{type:"java",name:"spring"},{type:"db",name:"mongodb"}]}}},false,true) |