mongoDB文檔操作

來源:互聯網
上載者:User

標籤:

資料庫操作無非就是增、刪、改、查。這篇主要介紹增、刪、改。

1.增

Mongodb插入操作很簡單,使用關鍵字“insert”。執行個體:

 1 > db.test.blog.insert({"haha":"xiaohaha","abc":"123"})   2 > db.test.blog.find();   3 { "_id" : ObjectId("5334dd149b7a445ea2166559"), "title" : "love", "content" : "I   4  love you" }   5 { "_id" : ObjectId("5334dd669b7a445ea216655a"), "job" : "java", "city" : "wuhan"   6  }   7 { "_id" : ObjectId("5334ec3f9b7a445ea216655b"), "a" : "b" }   8 { "_id" : ObjectId("5338bc89125a366c3f32dd00"), "haha" : "xiaohaha" }   9 { "_id" : ObjectId("5338bce3125a366c3f32dd01"), "haha" : "xiaohaha", "abc" : "12  10 3" }  11 >  

使用insert關鍵字,裡面設定文檔。如果文檔中沒有“_id”,Mongodb會自動產生。

當執行插入操作時,資料庫會校正是否包含“_id”鍵,並且文檔不超過4MB,除此之外,不做其他檢查。這樣使得資料庫更加安全,遠離注入式攻擊(Mongodb在插入時不執行代碼)。

2.刪
1 > db.test.blog.remove({"a":"b"})  2 > db.test.blog.find({"a":"b"})  3 > db.test.blog.remove()  

remove可以接受一個查詢文檔作為選擇性參數,給定參數以後,只有合格文檔才會被刪除。如果沒有帶參數,那麼就是刪除集合中的所有文檔,但是不會刪除集合本身,原來的索引也會保留。

3.改

文檔存入資料庫後,可以使用update方法來修改它,update有兩個參數,一個是查詢文檔,用來找出要更新的文檔,另一個是修改器文檔,描述對找到的文檔做哪些修改。更新操作時原子的,若是兩個更新同時發生,先到達伺服器的先執行,接著執行另一個。

更新方式一:文檔結構變動比較大使用
 1 > var jobs = db.test.blog.findOne({"job":"java"});   //這裡這能查詢單個對象,才能在後面使用update修改   2 > jobs.job = "hadoop";   3 hadoop   4 > jobs.exp = "5 year";   5 5 year   6 > jobs.city = ["wuhan","beijin","shanghai"];   7 [ "wuhan", "beijin", "shanghai" ]   8 > db.test.blog.update({"job":"java"},jobs);  //使用update修改   9 > db.test.blog.find({"job":"hadoop"});  10 { "_id" : ObjectId("5334dd669b7a445ea216655a"), "job" : "hadoop", "city" : [ "wuhan", "beijin", "shanghai" ], "exp" : "5 year" }  
修改資料方式一代碼更新方式二:使用修改器,文檔只做部分更新使用
  • $set和$unset

$set用來指定一個鍵的值。如果鍵不存在,則建立它。可以用來修改值,數組,內嵌文檔。

$unset用來卸載一個索引值對。

 1 > db.test.blog.insert({"_id":0001,"name":"joe","age":25,"favortie":"book"}); //插入資料   2 > db.test.blog.find();  //查詢   3 { "_id" : 1, "name" : "joe", "age" : 25, "favortie" : "book" }   4 > db.test.blog.update({"name":"joe"},  //更新單個資料age,並且改變資料類型int->string   5 ... {"$set":{"age":"29"}})   6 > db.test.blog.find();   7 { "_id" : 1, "age" : "29", "favortie" : "book", "name" : "joe" }   8 > db.test.blog.update({"name":"joe"},  //變為數組   9 ... {"$set":{"favortie":["book","tv"]}})  10 > db.test.blog.find();  11 { "_id" : 1, "age" : "29", "favortie" : [ "book", "tv" ], "name" : "joe" }

$unset代碼

1 > db.test.blog.find();  2 { "_id" : 1, "age" : "29", "favortie" : [ "book", "tv" ], "name" : "joe" }  3 > db.test.blog.update({"name":"joe"},  4 ... {"$unset":{"age":1}})  5 > db.test.blog.find();  6 { "_id" : 1, "favortie" : [ "book", "tv" ], "name" : "joe" }  

 更新數字

$inc用來增加索引值,鍵不存在時建立

1 > db.test.blog.update({"name":"joe"},{"$inc":{"age":1}});  2 > db.test.blog.find();  3 { "_id" : 1, "age" : 1, "favortie" : [ "book", "tv" ], "name" : "joe" } 

數組修改器

$push會向已有的數組末尾加入一個元素,要是沒有就建立數組

1 > db.test.blog.find();  2 { "_id" : 1, "age" : 1, "like" : [ "eat", "booke" ], "name" : "joe" }  3 > db.test.blog.update({"name":"joe"},{$push:{"like":"abc"}});  4 > db.test.blog.find();  5 { "_id" : 1, "age" : 1, "like" : [ "eat", "booke", "abc" ], "name" : "joe" } 

 $pop可以從數組任何一端刪除元素。{$pop:{key:1}}從數組末尾刪除,{$pop:{key:1}}則從頭部刪除

$pull基於特定條件刪除

1 > db.test.blog.update({"name":"joe"},{$pull:{"like":"booke"}});  2 > db.test.blog.find();  3 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }

數組定位

數組定位可以使用位置或者定位操作符“$”

數組下標都是從0開始,所以可以使用下標直接作為鍵來選擇元素

 

使用upsert(update or insert)

upsert是一種特殊的更新,要是沒有文檔符合更新要求,就會以這個條件和更新文檔做為基礎建立一個新的文檔。如果找到匹配的文檔,則正常更新。update的第三個參數表示是否使用upsert更新

 1 > db.test.blog.find()  //查詢所有資料   2 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }  //沒有我要更新的資料   3 > db.test.blog.update({"url":"www.baidu.com"},{"$inc":{"visits":1}},true)  //使用upsert方式修改   4 > db.test.blog.find()  //查詢所有資料,發現多了一個文檔   5 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }   6 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits   7 " : 1 }   8 > db.test.blog.update({"url":"www.baidu.com"},{"$inc":{"visits":1}},true)  //再次使用upsert   9 > db.test.blog.find()  10 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }  //發現是修改文檔  11 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  12 " : 2 }  

更新多個文檔

預設情況下,更新只對合格第一個文檔進行修改,如果有多個合格文檔,其餘文檔就沒有變化。如果想要更新所有匹配條件的文檔,就要設定第四個參數為true

 1 > db.test.blog.find({"url":"www.baidu.com"});  //查詢url為baidu的記錄有兩條   2 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits   3 " : 2 }   4 { "_id" : "2", "url" : "www.baidu.com", "visits" : "5" }   5  //更新所有合格資料   6 > db.test.blog.update({"url":"www.baidu.com"},{"$set":{"visits":10}},false,true)   7    8 > db.test.blog.find({"url":"www.baidu.com"});  //重新查詢,資料都修改了   9 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  10 " : 10 }  11 { "_id" : "2", "url" : "www.baidu.com", "visits" : 10 }  

update的四個參數描述:

1.需要更新文檔匹配的條件

2.需要更新的資料

3.是否採用upsert方式更新:預設false

4.是否使用匹配條件的文檔都修改:預設false

 

mongoDB文檔操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.