MongoDB學習總結二

MongoDB的一些操作:

創建數據庫:

use test

注意此時數據庫並沒有創建,只是在mongo的預處理緩存中存在,只有爲mongo加入相應的list,才真正創建。如果什麼都不幹就離開的話,這個空數據庫就會被刪除。

 

show dbs  查看所有的集合

show collections    查看集合中所有的文檔

db.help()   查看幫助

db.students.help()   查看集合的幫助

db.system.indexes.find()   查看索引

db.students.drop()   刪除文檔中的數據

 

插入數據:

db.[documentName].insert()

例如:

db.persons.insert({name:"zhangsan"}),該操作會自動增加一個_id鍵。

 

save操作和insert操作的區別:

當遇到_id相同的情況,save會保存操作,insert則會報錯。

批量插入:

for(var int i=0; i<10; i++){

           db.person.insert({name:i});

    }

每次插入的文檔不能超過4M,使用Object.bsonsize(doc)可以查看doc文檔轉換爲bson的大小。

 

刪除文檔:

db.[documentName].remove()

db.user.remove()    //該操作會刪除user集合中的所有文檔,但不會刪除user集合,原始的索引也將會保留。

根據條件進行刪除:

db.persons.remove({_id:1})

如果要刪除一個數據量十分龐大的集合,直接刪除該集合比直接用remove的效率高很多。

 

更新文檔:

更新操作是原子的,若兩個更新同時發生,先到達服務器的先執行。

db.[documentName].update({查詢器},{修改器})

//主鍵衝突的時候會報錯並停止更新。

insertOrUpdate操作:

db.[documentName].update({查詢器},{修改器},true)

批量更新:

db.user.update({name:"zhangsan"},{$set:{name:"lisi"}},false,true)

將name爲zhangsan的數據批量更新name爲lisi

如果有多個文檔符合查詢器的條件,妖精這些匹配的文檔全部更新,則將update的第四個參數設置爲true

執行getLastError命令可以查看到底更新了多少文檔:

db.runCommand({getLastError:1})

 

使用修改器來完成局部更新操作:

修改器:

$set:用來指定一個鍵值對,如果鍵存在就進行修改,不存在則添加。

db.person.update({"name":"xiaoming"},{$set:{"book":"java"}})

$set修改內嵌文檔:

db.person.update({"author.name":"john"},{$set:{"authoe.name":"lily"}})//author爲person的內嵌文檔

 

$inc:只適用於數字類型,爲指定的鍵對應的數字類型的值進行加減操作。

$uset:刪除指定的鍵

db.person.update({"name":"xiaoming"},{$set:{"book":1}})

 

數組修改器:

$push:

(1)如果指定的鍵是數組,則追加的數值

(2)如果指定的鍵不是數組,則中斷當前操作。

(3)如果指定的鍵是數組但是指定的鍵不存在,則創建數組類型的鍵值對

db.user.update({"name":"zhangsan"},{$push:{"books":{"java":"java7","nosql":"mongodb"}}})

 

$pushAll:可以批量添加數組,用法同$push

 

$ne:判斷鍵所指定的值是否等於$ne的值

db.user.update({"name":{"$ne":"lucy"}},{$push:{"books":{"java":"java7","nosql":"mongodb"}}})

 

$addToSet:目標數組存在此項則不錯操作,不存在則加進去

$addToSet和$each結合起來添加多個不同的值:

db.user.update({"_id":"123"},{"$addToSet":{"emails":{"$each":["[email protected]","[email protected]"]}}})

$each會循環遍歷後面的數組,把每一個數值進行addToSet操作

 

$pop:從指定數組刪除一個值,1表示刪除最後一個數值,-1表示刪除第一個數值。(這相當於把數組看成是隊列或者棧)

{$pop:{"key":1}}//從末尾刪除一個元素

{$pop:{"key":-1}}//從頭部刪除一個元素

 

$pull:刪除一個被指定的數值

db.user.update({"_id":"1234"},{$pull:{"name":"john"}})

$pullAll:一次性刪除多個指定的值

 

數組定位修改器

$ :數組定位器,如果數組有多個數值,我們只想對其中的一部分進行操作,$用來定位查詢文檔已經匹配的元素。

db.blog.update({"comments":"john"},{"$set":{"comments.$.author":"jim"}})

 

注意:當doucument被創建時,DB會爲其分配內存和預留內存,當修改操作不超過預留內存時,修改的速度是很快的,但是當超過了預留內存時就要重新分配預留內存,則會消耗時間。所以,在進行push等操作時一定要注意,push的內容不要過多,如果push成爲了瓶頸,可以將內嵌數組獨立出來放到一個單獨的集合中。

 

upsert操作

如果沒有文檔符合更新條件,就以這個條件和更新文檔爲基礎創建一個文檔;如果找到了匹配條件的文檔,則正常更新。

db.persons.update({"count":25},{$inc:{"count":3}},true)

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章