數(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 } )