————————————————————————————————————————————————————————————
-----------------今日份複習nodejs----------------------------
----- Mongodb數據可以介紹
----- Mongodb數據庫操作
————————————————————————————————————————————————————————————
————————————————
1.數據庫引言
1.1 數據庫用來做什麼?
存儲數據。
1.2 什麼是數據庫?
數據庫(Database)是按照數據結構來組織,存儲和管理數據的倉庫。主要用他進行管理各種系統的數據,作爲科學研究和決策的重要技術手段。
1.3 關係型數據庫
按照關係模型存儲數據的數據庫,數據與數據之間的關聯非常密切,可以實現跨數據表查詢數據,佔用更少的硬盤實現更多數據存儲。
T-SQL標準的結構化查詢語言是關係型數據庫的通用查詢語言。
關係型數據庫:Access, mysql ,sqlServer, oracle, db2等
1.3.2 關係型數據庫的優勢
- 複雜查詢
可以使用SQL語句方便的在多個表之間做非常複雜的數據查詢。 - 事務支持
- 使得對於安全性能很高的數據訪問要求得以實現。
1.4 非關係型數據庫
不按關係模型存儲數據的數據庫統稱爲noSQL。
一層含義:不是SQL,不是關係型數據庫。
第二層含義,not only SQL,不僅僅是SQL。
非關係型數據庫: MongoDB, Redis, Hbase, CouchDB, SQLite等
1.4.2 非關係型數據庫的優勢
- 性能
NOSQL是基於鍵值對的,可以想象表中的主鍵和值得對應關係,而且不需要經過sql層得解析,所以性能非常高。 - 可擴展性
同樣也是因爲基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
1.5對比
關係型數據庫結構:一臺服務器 -> 數據庫 -> 數據表 -> 數據行
非關係型數據庫結構:一臺服務器 -> 數據庫 -> 集合 -> 文檔
2.MongoDB數據庫
2.1 MongoDB數據庫簡介
MongoDB是一個基於分佈式文件存儲的數據庫。由c++語言編寫,旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB是非關係型數據庫當中功能最豐富,最像關係型數據庫的。
2.2 MongoDB數據庫優點
他的特點是高性能,易部署,易使用,存儲數據非常方便;
MongoDB以BSON(二進制 + JSON)格式進行數據存儲,可以直接對象,數組。
2.3 MongoDB的安裝
- 下載mongoDB http://www.mongodb.com
- 尋找我們完整安裝的mongoDB
在計算機C盤中尋找 Program files -> Mongodb - 將mongoDB配置爲全局變量(設置環境變量)
將mongodb的bin文件夾路徑添加進全局環境變量path中。
在cmd中運行 mongo 出現以下界面,表明加入全局變量成功。
2.4 創建文件夾
- 在非系統盤下(D盤)創建一個文件夾 叫做 mongodb,再創建兩個子文件夾db和log
- 位置:\mongoddb \mongodb\db \mongodb\log
- 圖示
2.5 將mongoDB掛載成爲windows服務
- 1.使用命令行掛載服務
//告訴計算機將數據庫放在以下文件中去
mongod --dbpath "d:\mongodb\db"
//告訴服務器將日誌文件放在以下文件夾中去
--logpath "d:\mongodb\log\mongodb.log"
//掛載成爲windows服務
--install --serviceName "MongoDB"
這時候就會在服務與程序中發現一個叫做MongoDB Server服務
-
2.補充服務的命令
+ 服務開啓的命令 net start mongodb
+ 服務關閉的命令 net stop mongodb
+ 卸載服務的命令 sc delete mongodb
我們以服務員身份打開cmd運行以上命令就會出現以下結果
3.MongoDB的基本使用
3.1MongoDB的基本命令
mongo進入數據庫管理模式
exit 退出數據庫管理模式3.2MongoDB的常用命令
- (1)數據庫命令
show dbs 顯示所有的數據庫列表
use + 數據庫名 如果數據庫存在那麼就進入數據庫 如果不存在就創建數據庫
db 查看當前數據庫
db.dropDatabase() 刪除數據庫 - (2)集合命令
show collections顯示當前數據庫的所有集合
db.集合名.insert({}) 創建集合並且添加數據進去
通常在創建數據時自動創建集合,不需要單獨創建
==db.集合名.drop()==刪除集合3.3MongoDB的文檔命令(對數據的操作)
- 新增數據
db.集合名.insert({BSON數據}) 新增數據
db.集合名.save({BSON數據}) 也可以實現新增數據
例如:
- (1)數據庫命令
db.user.insert({"name":"admin","age":"10"})
db.user.insert({"name":"admin","password":"123456"})
非關係型數據庫也可以插入不同鍵名的數據
db.user.insert({"name":"admin","password":"123456","age":18,"qq":"861918672})
insert()和save()方法的區別:
insert()是單純的向數據庫添加數據。
save()也是向數據庫添加數據,如果數據庫中的數據已經存在該數據則更新數據。更新的話需要傳入該條數據的id。
- 查找數據
db.集合名.find() 查看當前集合下所有的數據
舉例:
db.user.find();
結果:
{ "_id" : ObjectId("5e815bd6424a337d44c4d41b"), "name" : "admin", "password" : "123456" }
{ "_id" : ObjectId("5e815be0424a337d44c4d41c"), "name" : "admin", "password" : "123456" }
db.集合名.find({條件對象}) 按照條件對象來查找
舉例:
db.user.find({"age":"20"})
結果:
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
db.集合名.find().pretty() 格式化輸出json對象
舉例:
對比:
db.user.find();
{ "_id" : ObjectId("5e815e4c424a337d44c4d41e"), "name" : "admin", "age" : "10" }
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
{ "_id" : ObjectId("5e815e55424a337d44c4d420"), "name" : "admin", "age" : "30" }
{ "_id" : ObjectId("5e815e58424a337d44c4d421"), "name" : "admin", "age" : "34" }
{ "_id" : ObjectId("5e815e69424a337d44c4d422"), "name" : "admin", "age" : "24" }
db.user.find().pretty();
{
"_id" : ObjectId("5e815e4c424a337d44c4d41e"),
"name" : "admin",
"age" : "10"
}
{
"_id" : ObjectId("5e815e51424a337d44c4d41f"),
"name" : "admin",
"age" : "20"
}
{
"_id" : ObjectId("5e815e55424a337d44c4d420"),
"name" : "admin",
"age" : "30"
}
{
"_id" : ObjectId("5e815e58424a337d44c4d421"),
"name" : "admin",
"age" : "34"
}
{
"_id" : ObjectId("5e815e69424a337d44c4d422"),
"name" : "admin",
"age" : "24"
}
- 修改數據
db.集合名.update(查找對象,修改結果) 修改數據 主鍵不能修改
舉例:
> db.user.find({"name":"mr.kang"})
{ "_id" : ObjectId("5e8160d8424a337d44c4d423"), "name" : "mr.kang", "age" : 20 }
//修改數據 將這條數據的age更改爲100
> db.user.update({"name":"康家豪"},{"age":100})
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> 結果:
> { "_id" : ObjectId("5e8160d8424a337d44c4d423"), "age" : 100 }
我們可以注意到ObjectId並沒有發生改變。
- 刪除數據
db.user.remove({}) 刪除user集合下的所有數據
代碼演示:
> db.user.remove({})
WriteResult({ "nRemoved" : 6 })
db.user.remove({條件}) 按照條件刪除數據
代碼演示:
//刪除name爲li的這條數據
> db.user.remove({"name":"li"})
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5e816429424a337d44c4d424"), "name" : "kang", "age" : 18 }
{ "_id" : ObjectId("5e816433424a337d44c4d425"), "name" : "wang", "age" : 20 }
>
4.MongoDB數據庫的高級用法
先添加一組singer數據:
db.singer.insert({
"num" : "1",
"name" : "劉德華",
"country":"中國",
"sex" : "男",
"age" : 55,
"score":100,
"works" : ["愛你一萬年", "忘情水", "來生緣", "我不夠愛你"],
"description" : "1961年9月27日出生於中國香港,演員、歌手、作詞人、製片人,影視歌多棲發展的代表藝人之一。"
});
db.singer.insert({
"num" : "2",
"name" : "張學友",
"country":"中國",
"sex" : "男",
"age" : 55,
"score":90,
"works" : ["一路上有你", "你好毒", "想和你去吹吹風"],
"description" : "1961年7月10日出生於香港,中國香港男歌手、演員,畢業於香港崇文英文書院。1984年因獲得首屆香港十八區業餘歌唱大賽冠軍而出道。"
});
db.singer.insert({
"num" : "3",
"name" : "黎明",
"country":"中國",
"sex" : "男",
"age" : 50,
"score":88,
"works" : ["今夜你會不會來"],
"description" : "1966年12月11日生於北京,歌手、演員、導演、商人、慈善事業工作者。"
});
db.singer.insert({
"num" : "4",
"name" : "郭富城",
"country":"中國",
"sex" : "男",
"age" : 51,
"score":70,
"works" : ["對你愛不完", "動起來", "我是不是該安靜的走開"],
"description" : "1965年10月26日出生於香港,華語流行男歌手、演員、舞者,演唱會舞蹈總監,華語歌壇勁歌熱舞代表人物之一。"
});
db.singer.insert({
"num" : "5",
"name" : "薛之謙",
"country":"中國",
"sex" : "男",
"age" :33,
"score":95,
"works" : ["認真的雪"],
"description" : "1983年7月17日出生於上海,華語流行樂男歌手、音樂製作人、演員、商人,畢業於格里昂酒店管理學院。"
});
db.singer.insert({
"num" : "6",
"name" : "李宇春",
"country":"中國",
"sex" : "女",
"age" : 32,
"score":65,
"works" : ["梨花香", "蜀繡"],
"description" : "1984年3月10日出生於成都,中國流行女歌手、詞曲創作人、電影演員、演唱會導演。"
});
db.singer.insert({
"num" : "7",
"name" : "周杰倫",
"country":"中國",
"sex" : "男",
"age" : 37,
"score":59,
"works" : ["青花瓷","雙截棍","七里香","發如雪","簡單愛"],
"description" : "1979年1月18日出生於臺灣省新北市,中國臺灣流行樂男歌手、音樂人、演員、導演、編劇、監製、商人。"
});
db.singer.insert({
"num" : "8",
"name" : "趙麗穎",
"country":"中國",
"sex" : "女",
"age" : 29,
"score":69,
"works" : ["花千骨插曲不可說"],
"description" : "1987年10月16日出生於河北省廊坊市,中國內地影視女演員。"
});
db.singer.insert({
"num" : "9",
"name" : "黃齡",
"country":"中國",
"sex" : "女",
"age" : 29,
"score":88,
"works" : ["high歌", "癢"],
"description" : "1987年2月13日出生於上海市,中國內地流行樂女歌手、戲劇演員。"
});
db.singer.insert({
"num" : "10",
"name" : "PSY",
"country":"韓國",
"sex" : "男",
"age" : 39,
"score":39,
"works" : ["江南style"],
"description" : "1977年12月31日出生於韓國首爾,韓國歌手。"
});
db.singer.insert({
"num" : "11",
"name" : "傑克遜",
"country":"美國",
"sex" : "男",
"age" : 51,
"score":0,
"works" : ["beat it"],
"description" : "1958年8月29日在美國印第安納州加里市出生,美國歌手、詞曲創作人、舞蹈家、表演家、慈善家、音樂家、人道主義者、和平主義者、慈善機構創辦人。"
});
db.singer.insert({
"num" : "12",
"name" : "楊坤",
"country":"中國",
"sex" : "男",
"age" : 44,
"score":90,
"works" : ["無所謂", "月亮代表我的心"],
"description" : "1972年12月18日生於內蒙古包頭,中國創作歌手。2001年5月,楊坤正式簽約北京竹書文化唱片公司。發行第一張專輯《無所謂》。"
});
db.singer.insert({
"num" : "13",
"name" : "劉歡",
"country":"中國",
"sex" : "男",
"age" : 43,
"score":80,
"works" : ["玩玩的月亮", "從頭再來"],
"description" : "生於1963年8月26日,流行音樂家,對外經濟貿易大學音樂教授。"
});
db.singer.insert({
"num" : "14",
"name" : "王菲",
"country":"中國",
"sex" : "女",
"age" : 46,
"score":70,
"works" : ["相約1998", "紅豆", "容易受傷的女人"],
"description" : "王菲,中國著名女歌手、影視演員,是1990年代初期至今華語樂壇最出色的女歌手之一,被公認爲樂壇天后。"
});
db.singer.insert({
"num" : "15",
"name" : "林志炫",
"country":"中國",
"sex" : "男",
"age" : 46,
"score":80,
"works" : ["單身情歌"],
"description" : "1966年7月6日生於臺灣,歌手、音樂製作人。"
});
4.1條件查找
案例1:查找女歌星
思路:查找sex = “女” 條件
db.singer.find({"sex":"女"})
結果:
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中國",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀繡"
],
"description" : "1984年3月10日出生於成都,中國流行女歌手、詞曲創作人、電影演員、演唱會導演。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42e"),
"num" : "8",
"name" : "趙麗穎",
"country" : "中國",
"sex" : "女",
"age" : 29,
"score" : 69,
"works" : [
"花千骨插曲不可說"
],
"description" : "1987年10月16日出生於河北省廊坊市,中國內地影視女演員。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42f"),
"num" : "9",
"name" : "黃齡",
"country" : "中國",
"sex" : "女",
"age" : 29,
"score" : 88,
"works" : [
"high歌",
"癢"
],
"description" : "1987年2月13日出生於上海市,中國內地流行樂女歌手、戲劇演員。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d434"),
"num" : "14",
"name" : "王菲",
"country" : "中國",
"sex" : "女",
"age" : 46,
"score" : 70,
"works" : [
"相約1998",
"紅豆",
"容易受傷的女人"
],
"description" : "王菲,中國著名女歌手、影視演員,是1990年代初期至今華語樂壇最出色的女歌手之一,被公認爲樂壇天后 。"
}
案例2:查找年齡大於50歲的歌星 大於 lt
思路: “age” > 50
> db.singer.find({"age":{$gt:50}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "劉德華",
"country" : "中國",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"愛你一萬年",
"忘情水",
"來生緣",
"我不夠愛你"
],
"description" : "1961年9月27日出生於中國香港,演員、歌手、作詞人、製片人,影視歌多棲發展的代表藝人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d428"),
"num" : "2",
"name" : "張學友",
"country" : "中國",
"sex" : "男",
"age" : 55,
"score" : 90,
"works" : [
"一路上有你",
"你好毒",
"想和你去吹吹風"
],
"description" : "1961年7月10日出生於香港,中國香港男歌手、演員,畢業於香港崇文英文書院。1984年因獲得首屆香港十八區業餘歌唱大賽冠軍而出道。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42a"),
"num" : "4",
"name" : "郭富城",
"country" : "中國",
"sex" : "男",
"age" : 51,
"score" : 70,
"works" : [
"對你愛不完",
"動起來",
"我是不是該安靜的走開"
],
"description" : "1965年10月26日出生於香港,華語流行男歌手、演員、舞者,演唱會舞蹈總監,華語歌壇勁歌熱舞代表人物 之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "傑克遜",
"country" : "美國",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美國印第安納州加里市出生,美國歌手、詞曲創作人、舞蹈家、表演家、慈善家、音樂家、人道主義者、和平主義者、慈善機構創辦人。"
}
注意:大於等於是這樣的
> db.singer.find({"age":{$gte:50}}).pretty()
案例3:查找年齡在30-40歲之間的歌星(查詢指定範圍歌星)
思路: "age"> 30 && age < 40
db.singer.find({"age":{$gte:30,$lte:40}})
結果:
> db.singer.find({"age":{$gte:30,$lte:40}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之謙",
"country" : "中國",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"認真的雪"
],
"description" : "1983年7月17日出生於上海,華語流行樂男歌手、音樂製作人、演員、商人,畢業於格里昂酒店管理學院。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中國",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀繡"
],
"description" : "1984年3月10日出生於成都,中國流行女歌手、詞曲創作人、電影演員、演唱會導演。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42d"),
"num" : "7",
"name" : "周杰倫",
"country" : "中國",
"sex" : "男",
"age" : 37,
"score" : 59,
"works" : [
"青花瓷",
"雙截棍",
"七里香",
"發如雪",
"簡單愛"
],
"description" : "1979年1月18日出生於臺灣省新北市,中國臺灣流行樂男歌手、音樂人、演員、導演、編劇、監製、商人。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韓國",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生於韓國首爾,韓國歌手。"
}
案例4:查詢外國歌手
思路: 不等於中國歌手
db.singer.find({"country":{$ne:"中國"}})
> db.singer.find({"country":{$ne:"中國"}}).pretty()
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韓國",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生於韓國首爾,韓國歌手。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "傑克遜",
"country" : "美國",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美國印第安納州加里市出生,美國歌手、詞曲創作人、舞蹈家、表演家、慈善家、音樂家、人道主義者、和平主義者、慈善機構創辦人。"
}
案例5:in字句:(枚舉) 不屬於 nin
db.singer.find({"key":{$in:[數組]}})
> db.singer.find({"name":{$in:["劉德華","薛之謙"]}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "劉德華",
"country" : "中國",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"愛你一萬年",
"忘情水",
"來生緣",
"我不夠愛你"
],
"description" : "1961年9月27日出生於中國香港,演員、歌手、作詞人、製片人,影視歌多棲發展的代表藝人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之謙",
"country" : "中國",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"認真的雪"
],
"description" : "1983年7月17日出生於上海,華語流行樂男歌手、音樂製作人、演員、商人,畢業於格里昂酒店管理學院。"
}
案例6:排序(1代表升序,-1代表降序)
根據分數score排序
db.singer.find().sort({"key":-1,"key2":1})
案例7:模糊查詢 加i不區分大小寫
db.singer.find({"name":/劉/i})
//查找出所有姓劉的明星
> db.singer.find({"name":/劉/i}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "劉德華",
"country" : "中國",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"愛你一萬年",
"忘情水",
"來生緣",
"我不夠愛你"
],
"description" : "1961年9月27日出生於中國香港,演員、歌手、作詞人、製片人,影視歌多棲發展的代表藝人之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d433"),
"num" : "13",
"name" : "劉歡",
"country" : "中國",
"sex" : "男",
"age" : 43,
"score" : 80,
"works" : [
"玩玩的月亮",
"從頭再來"
],
"description" : "生於1963年8月26日,流行音樂家,對外經濟貿易大學音樂教授。"
}
其他方法大家有需求的話就去百度查找,這裏只列舉了一部分比較常用的方法。
————————————————————————————————————
寫在後面
隔壁孩子10篇博客node入門而且寫了一個前後端分離項目,你怎麼還在睡覺!!!(六)
mongoose學習
使用express + mongoDB + mongoose 實現一個具有登錄註冊,增刪查改的新聞系統
——————————————————————————————————
————————————————