MongoDB 學習三(資料庫的增刪改查)
接昨天的內容學習,首先做一個回顧:
開始今天的內容:
1、刪除文件資料
昨天說過刪除文件的方法,今天補充幾點:
db.persons.remove({name:"fanhu"}) //刪除當前資料文件中包含這條內容的資料,_id 一塊被刪除。db.persons.remove() //刪除persons下的所有資料,_id 是儲存下來的,只是資料沒有了。
tips:如果要刪除的集合資料量很大,直接刪除該集合(見下一條)並重新建立索引的方法比直接使用 remove 效率高很多。
2、刪除庫中的集合(這裡把persons這個資料文件刪除掉)
db.persons.drop()再來檢視
show collections --->這時候foobar這個資料庫中已經沒有persons這個資料文件了,當該資料庫中的資料文件都被刪除後foobar這個資料庫也會被自動刪除
3、刪除資料庫
db.dropDatabase()4、資料庫級別的help (要學會檢視幫助和官方文件)
show dbs //檢視所有資料庫
上面我們把foobar這個資料庫刪除掉了,這裡再重新建立一次,就當複習了。
建立完成後,這裡直接使用 db.help() 會列出一堆方法,後面再詳細的去學。
db.stats() ----> //得到當前資料庫的狀態 不要寫錯了,不是status啊。
5、資料文件集合的help
db.persons.help() ---> 同樣會列出一堆方法。
6、資料庫和集合的命名規範
①:不能是空字串 ②:不能含有 引號、逗號、空格、斜槓以及各種奇怪字元,總之作為一名程式設計師,我相信你懂得。這個短橫線是可以使用的,但是最好別用,容易被當成減號處理,需要設定之後再用,所以沒必要給自己添麻煩。 ③:全部小寫,並且不能和系統保留庫同名,如admin、local、config ④:最多64個位元組
7、可以使用內嵌文件並且支援陣列
db.persons.insert({age:"27",study:{year:2016,month:12}})
8、批量插入文件
使用shell的for迴圈9、save操作
save和insert的區別就在於當遇到 _id 相同的情況,前面說過,每條資料都會自動生成一個 _id 來作為唯一標識。我們現在插入一條資料:db.psersons.insert({_id:0001},{name:"fanhu"})
然後再來插入一條資料:db.persons.insert({_id:0001},{name:"huzi"})
因為兩條資料的 _id 相同,然後就報錯了。
如果我們使用save就不會出現這種情況,當遇到 _id 相同的情況,會當做更新來處理。
10、更新文件
昨天講了db.persons.update(),再來做個例子:
再新增上一條資料的,結果被直接替換為{ "_id" : ObjectId("5864e6819a74ca578c124615"), "age" : 27 },因此這種方法也叫做強制替換。
②:我們上面說過 update() 有兩個引數,第一個查詢器,第二個是修改器,如果原來文件中有一條資料,而我想跟新之後的效果是,原來有的資料就進行更新操作,沒有的資料就進行插入操作,這時候要用到第三個引數 ,true或false,也就是update(查詢器,修改器,true)。
③:還有昨天說過的使用 $set 修改器 能夠實現同樣的效果。
下面再說幾個修改器:
④: $inc 修改器:自動的增加或減小一個數,直接上例子:
⑤:$unset修改器:刪除資料文件中的一個鍵。
此時第二條資料中已經沒有了 height 這一條。
⑥:$push修改器:如果指定的鍵是陣列,則追加新的陣列。如果指定的鍵不是陣列,則中斷當前的操作。如果不存在指定的鍵,則建立陣列型別的鍵值對。 看例子:
⑦:$pushAll修改器:批量追加
語法: db.persons.update({name:"fanhu"},{$pushAll{ 要追加到的陣列名 : [ 這裡是要追加的陣列 ]}})
⑧:$addToSet 修改器:目標陣列存在該項內容則不進行操作,不存在就追加進去
語法: db.persons.update({name:"fanhu"},{$addToSet:{ 目標資料:要追加的內容}})
可以看到我們第一次並沒有執行修改,第二次進行了追加。
⑨:$pull 修改器:刪除陣列中的某一項
語法:db.persons.update({name:"fanhu"},{$pull:{要從哪個陣列中刪除 : "要刪除的項"}})
此時陣列books中已經沒有js11111這一項。
⑩:$pullAll 修改器:批量刪除陣列中的項
語法:db.persons.update({name:"fanhu"},{$pullAll:{ 要從哪個陣列中刪除 : ["要刪除的項1","要刪除的項2"]}})
11、批量更新
上面說到了update的三個引數,這裡要用到第四個引數,也是true或false。
tips:如果要使用第四個引數進行批量跟新,得配合$set這個修改器進行操作,直接上例子: