【mongodb】mongodb 權威指南筆記之增刪改查

插入數據:

1.插入數據:一次性插入多條數據能夠明顯提升插入速度。
一次性輸入數十數百乃至數千的文檔會明顯提高插入的速度,一次性批量插入只是 單個 TCP請求。避免了許多零碎請求帶來的開銷,由於無需處理大量的消息頭,這樣能減少插入時間。單個文檔發送到數據庫的時候會有個頭部信息,告訴數據庫對指定的集合做插入操作。用批量插入的話,數據庫就不用一個個做頭信息處理了。

更新數據

2.update數據的時候要用$set,如果不用 set 會 直接把所有的都用新值覆蓋掉。update 第三個參數是 upset =true ,沒有時候插入,第四個參數是是否更新多個符合條件的文檔。
例子:

db.user_profile.update({user_id:"xxxxx"},{$set:{"permission" : [ "admin", "analysis", "payment", "data"] }})

$inc
$inc 和 $set 的用法類似,是用來增加(和減少)數字的。$inc 只用於整數、長整數,或雙精度浮點數,如果是其他類型會導致操作失敗。其中包括很多語言會自動轉換成數字類型如:null, 布爾類型或者數字構成的字符串。
例子:
要是小球撞到了磚塊會給玩家加分,加分可以隨便給。假設玩家分數基數是50,使用$inc修改器給玩家加50分。

db.games.update({"game":"pinball","user":"joe"}, {$inc:{"score":50}})

3.修改數組:
使用$addToSet 可以插入不存在的數組,同時可以避免重複

db.user.update({"_id":ObjectId("xxxxxxxxx")}, {$addToSet:{"email": "[email protected]"}})

$addToSet 和$each 組合使用:

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

刪除

4.刪除數據元素
有幾個從數組中刪除數組元素的方法,若是把數組看成隊列或者棧,可以用”$pop”,這個修改器可以從數組的任何一端刪除元素。{$pop:{key:1}} 從數組末尾刪除一個元素。
{$pop:{key:-1}} 從頭刪除。 有時要基於特定的條件來刪除元素,而不是僅僅根據位置, “$pull” 可以做到。例如,有個待完成事項列表,順序有些問題。

db.lists.insert({"todo":{["dishes","laundry", "ry cleaning"]}})
# 要把洗衣服刪掉 可以從列表中先刪掉
db.lists.updata({}, {"$pull":{"todo":"laundry"}})

# $pull會把所有匹配到的刪掉  比如 對數組[1,2,1,3,1]執行 pull 1 就會剩下 [2,3]

數組的定位修改器

如果數組有多個值,我們想對其中一部分進操作,就需要一些技巧。有兩種方法操作數組中的值,通過位置或者定位操作符(”$”)

可以直接將數組下標作爲鍵來選擇元素。
例子:

>db.blog.posts.findOne()
{"_id":ObjectId("xxxxxxx"),
"content":"...."
"comments":
[{
"comment":"good!"
"author":"joe"
"votes": 0
},
{
"comment":"good good!"
"author":"tom"
"votes": 0
},
{
"comment":"good good good!"
"author":"joy"
"votes": 0
}
]}

如果想增加一個評論的投票數量。可以這麼做:
db.blog.update({"post":post_id}, {$inc:{comments.0.votes:1})

大部分情況下我們並不知道下標,這時候就用到$了,用來定位查詢文檔已經匹配到的元素:
db.blog.update({"comments.author":"joy"}, {$inc:{comments.$.votes:1})
值得注意的是 $只會匹配第一個元素, 所以john 有不止一個評論的時候,那麼只有第一個匹配到的會被修改。

先寫這些吧,心情不好,看書了。

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