隔壁孩子10篇博客node入門而且寫了一個前後端分離項目,你怎麼還在睡覺!!!(五)

————————————————————————————————————————————————————————————
-----------------今日份複習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數據}) 也可以實現新增數據
      例如:
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歲的歌星 大於 gtgt 小於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 實現一個具有登錄註冊,增刪查改的新聞系統
——————————————————————————————————
————————————————

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