標籤:活性 特定 att 增刪改查 刪除 add 複雜 img 高中
一、傳統資料庫技術回顧資料庫就是儲存資料的,那麼儲存資料就用txt就行了啊,為什麼要有資料庫?理由之1: 資料庫有行、列的概念,資料有關係,資料不是散的。老牌資料庫,比如MySQL、SQL Server、Oracle、Access。這些資料庫,我們管他們叫做結構型資料庫。為什嗎?因為每個表中,都有明確的欄位,每行記錄,都有這些欄位。不能有的行有,有的行沒有。理由二:資料庫能夠提供非常方便的介面,讓增刪改查操作變得簡單我們的老牌資料庫,都無一例外的使用SQL語言,管理資料庫。SQL就是structure query language。比如,查詢所有女生: SELECT * FROM step1 WHERE xingbie = ‘女‘;再比如,查詢所有女生,並且年齡20~24之間,且在北京:1SELECT * 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命令了:mongod.exe 開機 mongo.exe 使用資料庫 mongoimport.exe 匯入資料
開機命令:mongod --dbpath mongeDBDATA--dbpath就是選擇資料庫文檔所在的檔案夾。也就是說,mongoDB中,真的有物理檔案,對應一個個資料庫。隨身碟可以拷走。一定要保持,開機這個CMD不能動了,不能關,不能ctrl+c。 一旦這個cmd有問題了,資料庫就自動關閉了。所以,應該再開一個cmd。輸入mongo:那麼,運行環境就是mongo文法了。列出所有資料庫:1show dbs 使用某個資料庫1use 資料庫名字如果想建立資料庫,也是use。use一個不存在的,就是建立。查看當前所在資料庫1db插入資料:student就是所謂的集合。集合中儲存著很多json。student是第一次使用,集合將自動建立。
四、資料庫使用要管理資料庫,必須先開機,開機使用mongod --dbpath c:\mongo管理資料庫:mongo (一定要在新的cmd中輸入)清屏:1cls查看所有資料庫列表1show dbs使用資料庫、建立資料庫1use itcast如果真的想把這個資料庫建立成功,那麼必須插入一個資料。資料庫中不能直接插入資料,只能往集合(collections)中插入資料。不需要建立集合,只需要寫點文法:1db.student.insert({“name”:”xiaoming”});db.student 系統發現student是一個陌生的集合名字,所以就自動建立了集合。刪除資料庫,刪除當前所在的資料庫1db.dropDatabase();
4.1 插入資料插入資料,隨著資料的插入,資料庫建立成功了,集合也建立成功了。1db.student.insert({"name":"xiaoming"});我們不可能一條一條的insert。所以,我們希望用sublime在外部寫好資料庫的形式,然後匯入資料庫:1mongoimport --db test --collection restaurants --drop --file primer-dataset.json-db test 想往哪個資料庫裡面匯入--collection restaurants 想往哪個集合中匯入--drop 把集合清空--file primer-dataset.json 哪個檔案這樣,我們就能用sublime建立一個json檔案,然後用mongoimport命令匯入,這樣學習資料庫非常方便。Mongo能存對象。4.2 尋找資料尋找資料,用find。find中沒有參數,那麼將列出這個集合的所有文檔:1db.restaurants.find()
精確匹配:1db.student.find({"score.shuxue":70}); //score這個json的shuxue這個key的value為70的多個條件:1db.student.find({"score.shuxue":70 , "age":12})大於條件:1db.student.find({"score.yuwen":{$gt:50}});或者。尋找所有年齡是9歲,或者11歲的學生 1db.student.find({$or:[{"age":9},{"age":11}]});尋找完畢之後,打點調用sort,表示升降排序。先按照borough升序,相同就address.zipcode升序1db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )
4.3 修改資料修改裡面還有查詢條件。你要該誰,要告訴mongo。尋找名字叫做小明的,把年齡更改為16歲:1db.student.update({"name":"小明"},{$set:{"age":16}});尋找數學成績是70,把年齡更改為33歲:1db.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. 1db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});2db.student.update({},{$set:{"age":33}},{multi: true}); //所有的都改完整替換,不出現$set關鍵字了:把小明這條記錄改成{"name":"大明","age":16}1db.student.update({"name":"小明"},{"name":"大明","age":16});
4.4 刪除資料1db.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.1db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )MongoVUE beta 是mongo資料庫視覺化檢視
資料庫樣本:
{"name":"小明","age":12,"hobby":["睡覺","吃飯"],"score":{"yuwen":59,"shuxue":80}}{"name":"小紅","age":11,"hobby":["學習","看書"],"score":{"yuwen":100,"shuxue":70}}{"name":"小強","age":13,"hobby":["打架"],"score":{"yuwen":2,"shuxue":70}}{"name":"小陳","age":9,"hobby":["打架","看書"],"score":{"yuwen":59,"shuxue":80}}
node12---mongodb