mongoDB數據庫操作

 

一、傳統數據庫技術回顧

數據庫就是存儲數據的,那麼存儲數據就用txt就行了啊,爲什麼要有數據庫?

 

理由之1: 數據庫有行、列的概念,數據有關係,數據不是散的。

老牌數據庫,比如MySQL、SQL Server、Oracle、Access。這些數據庫,我們管他們叫做結構型數據庫。爲什麼?因爲每個表中,都有明確的字段,每行記錄,都有這些字段。不能有的行有,有的行沒有。

理由二:數據庫能夠提供非常方便的接口,讓增刪改查操作變得簡單

我們的老牌數據庫,都無一例外的使用SQL語言,管理數據庫。

SQL就是structure query language。

比如,查詢所有女生: SELECT * FROM step1 WHERE xingbie = '女';

再比如,查詢所有女生,並且年齡20~24之間,且在北京:

  1. SELECT * FROM step1 WHERE xingbie = '女' AND nianling < 24 AND nianling >= 20 AND xianzaisuozaidi = '北京';

 

理由之三:數據庫不能自己玩兒,要給向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://www.mongodb.com/

手冊: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語法了。

列出所有數據庫:

  1. show dbs

 

使用某個數據庫

  1. use 數據庫名字

如果想新建數據庫,也是use。use一個不存在的,就是新建。

 

查看當前所在數據庫

  1. db

 

插入數據:

student就是所謂的集合。集合中存儲着很多json。

student是第一次使用,集合將自動創建。


四、數據庫使用

要管理數據庫,必須先開機,開機使用mongod --dbpath c:\mongo

管理數據庫:mongo  (一定要在新的cmd中輸入)

清屏:

  1. cls

 

查看所有數據庫列表

  1. show dbs

 

使用數據庫、創建數據庫

  1. use itcast

 

如果真的想把這個數據庫創建成功,那麼必須插入一個數據。

數據庫中不能直接插入數據,只能往集合(collections)中插入數據。不需要創建集合,只需要寫點語法:

  1. db.student.insert({“name”:”xiaoming”});

db.student  系統發現student是一個陌生的集合名字,所以就自動創建了集合。

 

刪除數據庫,刪除當前所在的數據庫

  1. db.dropDatabase();

 


4.1 插入數據

插入數據,隨着數據的插入,數據庫創建成功了,集合也創建成功了。

  1. db.student.insert({"name":"xiaoming"});

 

我們不可能一條一條的insert。所以,我們希望用sublime在外部寫好數據庫的形式,然後導入數據庫:

 

  1. mongoimport --db test --collection restaurants --drop --file primer-dataset.json

-db test  想往哪個數據庫裏面導入

--collection restaurants  想往哪個集合中導入

--drop 把集合清空

--file primer-dataset.json  哪個文件

 

這樣,我們就能用sublime創建一個json文件,然後用mongoimport命令導入,這樣學習數據庫非常方便。

 

4.2 查找數據

查找數據,用find。find中沒有參數,那麼將列出這個集合的所有文檔:

  1. db.restaurants.find()

 

精確匹配:

  1. db.student.find({"score.shuxue":70});

 

多個條件:

  1. db.student.find({"score.shuxue":70 , "age":12})

 

大於條件:

  1. db.student.find({"score.yuwen":{$gt:50}});

 

或者。尋找所有年齡是9歲,或者11歲的學生

  1. db.student.find({$or:[{"age":9},{"age":11}]});

 

查找完畢之後,打點調用sort,表示升降排序。

  1. db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )

 


4.3 修改數據

修改裏面還有查詢條件。你要該誰,要告訴mongo。

查找名字叫做小明的,把年齡更改爲16歲:

  1. db.student.update({"name":"小明"},{$set:{"age":16}});

 

查找數學成績是70,把年齡更改爲33歲:

  1. db.student.update({"score.shuxue":70},{$set:{"age":33}});

 

更改所有匹配項目:"

By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.

  1. db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});

 

完整替換,不出現$set關鍵字了:

  1. db.student.update({"name":"小明"},{"name":"大明","age":16});

 

4.4 刪除數據

 

  1. db.restaurants.remove( { "borough": "Manhattan" } )

 

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.

  1. db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )

 


五、Node.js操作MongoDB

需要引包:

  1. npm install mongodb

 

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