NodeJs06

數(shù)據(jù)庫 databases

--------------------------------------------

1.1 數(shù)據(jù)庫的作用

# 存儲數(shù)據(jù)

1.2 數(shù)據(jù)庫的分類

1.2.1 結(jié)構(gòu)型數(shù)據(jù)庫也叫關(guān)系型數(shù)據(jù)庫

MySQL、SQL Server、Oracle、Access等等

采用SQL語言,管理數(shù)據(jù)庫

結(jié)構(gòu)型數(shù)據(jù)庫的特點(diǎn)

# 數(shù)據(jù)庫里面有表,表有行和列的概念,每個(gè)表中,都有明確的字段,每行記錄,都有這些字段。不能有的行有,有的行沒有。

1.2.2 非結(jié)構(gòu)型數(shù)據(jù)庫

mongodb

非結(jié)構(gòu)型數(shù)據(jù)庫的特點(diǎn)

# 沒有行、列的概念。用JSON來存儲數(shù)據(jù)

# 集合就相當(dāng)于“表”,文檔就相當(dāng)于“行”

# 文檔就是json 可以通過javascript進(jìn)行操作

為什么不用txt文檔或者excell來存儲數(shù)據(jù)

# 當(dāng)數(shù)據(jù)比較大的時(shí)候,對文檔的讀取是一次性讀取,內(nèi)存不夠,而數(shù)據(jù)庫讀取是分段讀取的

# 增刪改查不方便

結(jié)構(gòu)型數(shù)據(jù)庫和非結(jié)構(gòu)型數(shù)據(jù)庫的不同點(diǎn)

結(jié)構(gòu)型數(shù)據(jù)庫存儲數(shù)據(jù)不靈活,一個(gè)字段,需要是同樣類型的數(shù)據(jù)。不能一行記錄字符串,一行記錄是數(shù)字。

非結(jié)構(gòu)型數(shù)據(jù)庫的特點(diǎn):

# 數(shù)據(jù)模型比較簡單

# 對數(shù)據(jù)庫性能要求較高

# 不需要高度的數(shù)據(jù)一致性

----------------------------

mongodb 安裝

1. 下載 https://www.mongodb.com/download-center#community

安裝過程中可以對安裝路徑進(jìn)行更改,建議不更改

# 數(shù)據(jù)庫的運(yùn)行文件的位置和數(shù)據(jù)庫存儲的位置不是一回事

2. 安裝成功后添加環(huán)境變量

eg:將mongo的bin目錄 C:\Program Files\MongoDB\Server\3.0\bin? 加入到系統(tǒng)的path環(huán)境變量中

為什么要添加環(huán)境變量

# 可以在不同的目錄下執(zhí)行mongodb的相關(guān)應(yīng)用操作

3. 環(huán)境變量添加成功后,可以在系統(tǒng)的任何盤符,使用mongo的命令了

4. 常用命令操作

mongod 開啟數(shù)據(jù)庫

mongo 操作數(shù)據(jù)庫

mongoimport 導(dǎo)入數(shù)據(jù)庫

5. 開啟數(shù)據(jù)庫

在32位操作系統(tǒng)中 執(zhí)行以下操作

mongod --dbpath C:\data? --storageEngine=mmapv1

在64位系統(tǒng)中

mongod --dbpath C:\data

注意:

# 如果光標(biāo)掛起,說明數(shù)據(jù)庫開啟成功

# --dbpath就是選擇數(shù)據(jù)庫文檔所在的文件夾

# --storageEngine=mmapv1 指定存儲格式,64位不需要指定

# 在mongoDB中,有物理文件對應(yīng)一個(gè)個(gè)數(shù)據(jù)庫,U盤可以拷走? 以ns結(jié)尾的文件即為數(shù)據(jù)庫。

6. 操作數(shù)據(jù)庫 執(zhí)行mongo 命令

# 一定要確保在操作數(shù)據(jù)庫之前數(shù)據(jù)庫已經(jīng)開啟了,不能關(guān),不能ctrl+c。 一旦這個(gè)cmd有問題了,數(shù)據(jù)庫就自動(dòng)關(guān)閉了。

######################

以上操作步驟,可以創(chuàng)建n個(gè)不同目錄下的數(shù)據(jù)庫存儲的地方,每次開始數(shù)據(jù)庫都要執(zhí)行以上操作,比較麻煩,為了簡化操作,可以讓mongodb成為電腦的服務(wù),那么采用開始mongodb服務(wù)每次都能快速啟動(dòng)數(shù)據(jù)庫,并且進(jìn)入到指定的數(shù)據(jù)庫存儲的地方? 注意以管理員的方式進(jìn)行安裝

32位操作系統(tǒng):

mongod --dbpath "D:\Data\db" --logpath "D:\Data\log\log.txt" --serviceName "MongoDb" --serviceDisplayName "mongodb" --journal --storageEngine=mmapv1? --install

64位:

mongod --dbpath "C:\data\db" --logpath "C:\data\log\log.txt" --serviceName MongoDB --install

# --serviceName 服務(wù)名稱 建議MongoDB

# --serviceDisplayName window組件的顯示名稱 可以跟服務(wù)名稱不一致

# 移除服務(wù) 將install改為remove即可

2.然后啟動(dòng)? 必須在管理員的權(quán)限下啟動(dòng)

net start MongoDB? 啟動(dòng)mongodb

net stop MongoDB? 關(guān)閉mongodb

##############################

7. 操作數(shù)據(jù)庫的相關(guān)指令 以下操作是mongodb的語法

7.1 show dbs

# 列出所有的數(shù)據(jù)庫

7.2 use 數(shù)據(jù)庫名字

# 使用某個(gè)數(shù)據(jù)庫

# 如果use一個(gè)不存在的,就是新建一個(gè)數(shù)據(jù)庫

7.3 db

# 查看當(dāng)前所在數(shù)據(jù)庫

7.4 db.students.insert({"name":"laowang","age":100});

# 向當(dāng)前數(shù)據(jù)庫所在的集合中插入一條數(shù)據(jù)

# db 表示當(dāng)前所在的數(shù)據(jù)庫

# students 代表是一個(gè)集合,一個(gè)數(shù)據(jù)庫里面可以有很多個(gè)集合

# students第一次使用,集合將自動(dòng)創(chuàng)建,集合中存儲的每一條json數(shù)據(jù)叫做文檔

7.5 show collections

顯示當(dāng)前數(shù)據(jù)中的集合

7.6 db.students.find()

查看當(dāng)前集合中的所有文檔

7.7 db.dropDatabase()

刪除當(dāng)前所在的數(shù)據(jù)庫

7.8 db.studetns.drop()

刪除數(shù)據(jù)庫中的指定集合

7.9 db.studetns.count()

查看當(dāng)前集合中有多少條數(shù)據(jù)

8. 插入數(shù)據(jù)

插入一條文檔

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

插入多條文檔

eg: db.student.insert([{"name":"laowang"},{"name":"laozhang"}]);

# 我們不可能一條一條的insert。所以,我們希望用sublime在外部寫好數(shù)據(jù)庫的形式,然后導(dǎo)入數(shù)據(jù)庫:

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

--db test? 想往哪個(gè)數(shù)據(jù)庫里面導(dǎo)入

--collection restaurants? 想往哪個(gè)集合中導(dǎo)入

--drop 把集合清空

--file primer-dataset.json? 哪個(gè)文件

9. 查找數(shù)據(jù)

查找數(shù)據(jù),用find。find中沒有參數(shù),那么將列出這個(gè)集合的所有文檔:

db.restaurants.find()

精確匹配:

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

多個(gè)條件:

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

大于條件:

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

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

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

查找完畢之后,打點(diǎn)調(diào)用sort,表示升降排序。

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

10. 修改數(shù)據(jù)

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

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

查找數(shù)學(xué)成績是70,把年齡更改為33歲:

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

更改所有匹配項(xiàng)目:

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

完整替換,不出現(xiàn)$set關(guān)鍵字了:

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

10. 刪除數(shù)據(jù)

只要匹配成功,就會刪除

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

刪除一條

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NoSql數(shù)據(jù)庫優(yōu)缺點(diǎn) 在優(yōu)勢方面主要體現(xiàn)在下面幾點(diǎn): 簡單的擴(kuò)展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型 在不足...
    dreamer_lk閱讀 2,877評論 0 6
  • 勵(lì)志成為全棧工程師的我今天了解了下Mongodb這種非結(jié)構(gòu)性數(shù)據(jù)庫。接下來我會盡量詳細(xì)的介紹這種數(shù)據(jù)庫的基礎(chǔ)用法(...
    編程小飛俠閱讀 1,244評論 6 10
  • 徐云霞三人在漆黑的山洞中艱難地摸索著向前行進(jìn),越向前走腳下的白骨就越少,一盞茶的時(shí)間過后已經(jīng)再也看不見任何白骨的影...
    長白居士閱讀 150評論 0 0
  • new 基本上等同與 alloc/init 唯一的區(qū)別就是alloc在分配內(nèi)存的時(shí)候使用了zone --使用Zon...
    Ever_Blacks閱讀 306評論 0 0
  • 之前寫了一篇自省文,回頭看看面目猙獰的自己是對孩子進(jìn)行了怎樣的摧殘。既然自己已經(jīng)意識到錯(cuò)誤,并且正在改正...
    記得祝福閱讀 241評論 4 5

友情鏈接更多精彩內(nèi)容