Mongodb中更新的學習小結

 今天繼續好久沒學習的mongodb的簡單學習,今天來看的是更新。先來看簡單的用法: 

use updatetest 
>switched to db updatetest 

首先插入一下: 
db.things.insert( { name : "test1"} ) 

db.things.find({name : "test1"}) 
會找到: 
  { "_id" : ObjectId("50f1778ea5ec290b7773303b"), "name" : "test1" } 

  更新的格式爲: 
  db.collection.update( criteria, objNew, upsert, multi ) 
參數: 
criteria - 查詢須要更新的項; 
objNew - 更新的對象或者 $ operators (例如 $inc) 這樣的操做因子 
upsert - 是不是 "upsert"; 也就是說若是記錄不存在是否插入新的記錄 
multi - 是否全部知足criteria的在整個文檔都更新 
注意:在缺省狀況下,update()只會更新第一個知足條件的項。若是須要修改因此的知足條件的 
項的話,須要使用multi這個標誌位。 

  db.things.update({name: "test1"}, {name: "test2"}) 
再find一下 
  db.things.find({name : "test2"}) 
會發現有test2了; 
   再來: 
db.things.update({name : "hello"}, {name: "hello,abc"}, true); 
  注意參數true這裏的用法,結果爲,由於hello沒有,因此只會插入 
hello,abc了。 
  也能夠寫成: 
  db.things.update({name : "hello"}, {name: "hello,abc"}, { upsert: true }); 
注意: 
一、update方法只更新一條記錄 
默認狀況下update只更新符合查詢條件的第一條找到的記錄。若是想更新全部符合條件的記錄,須要手動添加 multi 這個參數。 

二、update方法的更新參數 
像下面這個語句 
updatetest.update( { _id: X }, {name: "Joe", age: 20 }); 
會把符合條件的原紀錄按照{name: "Joe", age: 20 }完整替換,而不是簡單的將name設爲"Joe",age設爲20. 
若是隻想更改這2個值,而不是替換完整對象,應該寫 
updatetest.update( { _id: X },{$set: {name: "Joe", age: 20 }}); 
   
   $inc的用法,好比統計常常要用到了,如: 
  db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
   
db.things.find({BlogPost : "How To Do Upserts"}) 
>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 1 } 
再多運行兩次: 

  db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
>db.things.find({BlogPost : "How To Do Upserts"}) 

>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 3 } 

能夠看到,hits變爲3了。 
    
multi的用法: 
   好比: 
db.Indexing.insert( { name : "Denis", age : 10 } ) 
db.Indexing.insert( { name : "Denis", age : 20 } ) 
db.Indexing.insert( { name : "Denis", age : 30 } ) 

要將全部的denies的age都更新,必須加行multi: 
db.Indexing.update({name: "Denis"}, {$set: {age: 42}},{ multi: true })
相關文章
相關標籤/搜索