一、傳統數據庫技術回顧
數據庫就是存儲數據的,那麼存儲數據就用txt就行了啊,爲什麼要有數據庫?
理由之1: 數據庫有行、列的概念,數據有關係,數據不是散的。
老牌數據庫,比如MySQL、SQL Server、Oracle、Access。這些數據庫,我們管他們叫做結構型數據庫。爲什麼?因爲每個表中,都有明確的字段,每行記錄,都有這些字段。不能有的行有,有的行沒有。
理由二:數據庫能夠提供非常方便的接口,讓增刪改查操作變得簡單
我們的老牌數據庫,都無一例外的使用SQL語言,管理數據庫。
SQL就是structure query language。
比如,查詢所有女生: SELECT * FROM step1 WHERE xingbie = '女';
再比如,查詢所有女生,並且年齡20~24之間,且在北京:
|
理由之三:數據庫不能自己玩兒,要給向PHP、.net、jsp等語言提供接口。
用php這些語言,能夠向數據庫之中增刪改查。
老牌數據庫,都是結構型數據庫,現在出了什麼問題?
比如,我們現在想往一個已經有1000條數據的數據庫中增加一個字段“高中信息”。
之前已經存在的數據,實際上不需要增加這個字段。因爲這些用戶已經填寫完畢表單了,不需要再手機高中信息了。我們的意圖就是在今後註冊的用戶,需要填寫高中信息。但是,我們剛纔說了,所謂的字段,是表的一個結構。所有的行都必須擁有,不能有的行有這個字段,有的行沒有這個字段。
可想而知,大數據時代,數據庫中有100萬條數據都算少的。我們如果要動字段,時間太長。
所以,字段這個東西,太不靈活。
數據不靈活。一個字段,需要是同樣類型的數據。不能一行記錄是文本,一行記錄是數字。
非結構型數據庫NoSQL應運而生。
NoSQL是個怪胎,無法挑戰老牌數據庫,但是在大數據時代有自己的意義。
二、NoSQL
非結構型數據庫。沒有行、列的概念。用JSON來存儲數據。
集合就相當於“表”,文檔就相當於“行”。
文檔就是JSON,上下文語境中,也是JavaScript範疇,所以我們的數據庫也是JS範疇的東西,JS全棧。
因此,我們總結NoSQL數據庫在以下的這幾種情況下比較適用:1、數據模型比較簡單;2、需要靈活性更強的IT系統;3、對數據庫性能要求較高;4、不需要高度的數據一致性;5、對於給定key,比較容易映射覆雜值的環境。
我們看,有些系統,特別需要篩選。比如,篩選出所有女生大於20歲的。那麼SQL型數據庫,非常擅長!因爲它有行、列的概念。
但是,有些系統,真的不需要進行那麼多的篩選,比如站內信。站內信只需要存儲就好了。不需要篩選。那麼NoSQL的。
NoSQL不是銀彈,沒有資格挑戰老牌數據庫,還是特定情況下,是適合的。
三、MongoDB安裝
手冊:https://docs.mongodb.org/manual/
win7系統需要安裝補丁,KB2731284。
此時,我們看一下裝好的文件夾:
C:\Program Files\MongoDB\Server\3.0\bin 加入到系統的path環境變量中
那麼我們就能在系統的任何盤符,使用mongo命令了:
mongo 使用數據庫
mongod 開機
mongoimport 導入數據
開機命令:
--dbpath就是選擇數據庫文檔所在的文件夾。
也就是說,mongoDB中,真的有物理文件,對應一個個數據庫。U盤可以拷走。
一定要保持,開機這個CMD不能動了,不能關,不能ctrl+c。 一旦這個cmd有問題了,數據庫就自動關閉了。
所以,應該再開一個cmd。輸入
那麼,運行環境就是mongo語法了。
列出所有數據庫:
|
使用某個數據庫
|
如果想新建數據庫,也是use。use一個不存在的,就是新建。
查看當前所在數據庫
|
插入數據:
student就是所謂的集合。集合中存儲着很多json。
student是第一次使用,集合將自動創建。
四、數據庫使用
要管理數據庫,必須先開機,開機使用mongod --dbpath c:\mongo
管理數據庫:mongo (一定要在新的cmd中輸入)
清屏:
|
查看所有數據庫列表
|
使用數據庫、創建數據庫
|
如果真的想把這個數據庫創建成功,那麼必須插入一個數據。
數據庫中不能直接插入數據,只能往集合(collections)中插入數據。不需要創建集合,只需要寫點語法:
|
db.student 系統發現student是一個陌生的集合名字,所以就自動創建了集合。
刪除數據庫,刪除當前所在的數據庫
|
4.1 插入數據
插入數據,隨着數據的插入,數據庫創建成功了,集合也創建成功了。
|
我們不可能一條一條的insert。所以,我們希望用sublime在外部寫好數據庫的形式,然後導入數據庫:
|
-db test 想往哪個數據庫裏面導入
--collection restaurants 想往哪個集合中導入
--drop 把集合清空
--file primer-dataset.json 哪個文件
這樣,我們就能用sublime創建一個json文件,然後用mongoimport命令導入,這樣學習數據庫非常方便。
4.2 查找數據
查找數據,用find。find中沒有參數,那麼將列出這個集合的所有文檔:
|
精確匹配:
|
多個條件:
|
大於條件:
|
或者。尋找所有年齡是9歲,或者11歲的學生
|
查找完畢之後,打點調用sort,表示升降排序。
|
4.3 修改數據
修改裏面還有查詢條件。你要該誰,要告訴mongo。
查找名字叫做小明的,把年齡更改爲16歲:
|
查找數學成績是70,把年齡更改爲33歲:
|
更改所有匹配項目:"
By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.
|
完整替換,不出現$set關鍵字了:
|
4.4 刪除數據
|
By default, the remove() method removes all documents that match the remove condition. Use the justOne option to limit the remove operation to only one of the matching documents.
|
五、Node.js操作MongoDB
需要引包:
|