1. 程式人生 > >MongoDB 學習三(資料庫的增刪改查)

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.getName()   ---> foobar   //得到當前的資料庫名字
db.stats()   ---->    //得到當前資料庫的狀態 不要寫錯了,不是status啊。


5、資料文件集合的help


db.persons.help()    ---> 同樣會列出一堆方法。

6、資料庫和集合的命名規範


 ①:不能是空字串
 ②:不能含有 引號、逗號、空格、斜槓以及各種奇怪字元,總之作為一名程式設計師,我相信你懂得。這個短橫線是可以使用的,但是最好別用,容易被當成減號處理,需要設定之後再用,所以沒必要給自己添麻煩。
 ③:全部小寫,並且不能和系統保留庫同名,如admin、local、config
 ④:最多64個位元組

7、可以使用內嵌文件並且支援陣列

db.persons.insert({age:"27",study:{year:2016,month:12}})


db.persons.insert({age:"27",study:[1,23,22]})


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"), "username" : "fanhu" }
再新增上一條資料的,結果被直接替換為{ "_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這個修改器進行操作,直接上例子: