hello,小夥伴們,我是 pubdreamcc
,本篇文章依舊出至於個人 GitHub倉庫 node學習教程
,若是你以爲我寫的還不錯,歡迎給個 star
,小夥伴們的 star
是我持續更新的動力 !javascript
node學習教程GitHubhtml
mongoDB
安裝這裏,我就不詳細介紹,你們能夠根據官網選擇匹配本身電腦系統的版本安裝便可。java
mongoDB download地址: downloadnode
下載下來以後,點擊打開直接下一步,下一步就 ok
了。git
安裝完成後,會在安裝目錄下面生成一個 mongoDB
的文件夾,打開文件夾,進入 bin
文件夾中,把這裏的路徑配置成環境變量。github
data
在任意盤符根目錄下建立一個 data
目錄,用來存放數據庫文件。 mongoDB
會自動把本身安裝位置的盤符根目錄下的 data
文件夾做爲本身的數據存儲目錄,這裏也能夠直接在安裝位置所在盤符建立。sql
若是 data
目錄建立在安裝位置的盤符根目錄下,直接
打開命令行,敲入:mongodb
mongod
若是是其餘位置,則須要指定數據存放的位置:shell
mongod --dbpath 文件路徑
若是看到輸出: waiting for connections on port 27017
說明啓動數據庫成功。數據庫
再打開一個命令行,敲入 mongo
,則會默認鏈接到本地開啓的數據庫。好了,到這裏咱們就完成了如何開啓一個 mongoDB
數據庫了,接下來只需往數據庫裏存數據,操做數據便可。
MongoDB
概念解析在mongodb
中有三個基本核心的概念:
文檔
集合
數據庫
它們之間是逐層包含的關係,一個集合能夠包含多個文檔,一個數據庫能夠有多個集合,下面聽我逐一道來:
文檔
: 文檔是一個鍵值(key-value
)對(即BSON
),本質相似於json
對象 的鍵值對。
{"name":"pubdreamcc", "age": 24}
集合
:集合就是 MongoDB 文檔組,實質上就是包含多個對象的數組。
好比,咱們能夠將如下不一樣數據結構的文檔插入到集合中:
{"name":"pubdreamcc"} {"name":"pubdreamcc1","name":"pubdreamcc2"} {"name":"pubdreamcc3","name":"pubdreamcc4","num":5}
數據庫(dataBase)
這裏的數據庫概念同 關係型數據庫中的數據庫概念一致,數據庫能夠包含多個集合。
下面給出一張圖用來表示 mongoDB
中的一些概念同 SQL
概念 的 對比,輔助理解。
mongoDB
基本操做在剛纔咱們鏈接上本地數據庫以後,在這個命令行,咱們能夠進行不少 mongoDB
提供的增刪改查等的基本操做,且聽我一一道來。
use 數據庫名稱
。若是數據庫不存在,則建立數據庫,不然切換到指定數據庫。
MongoDB 中默認的數據庫爲 test,若是你沒有建立新的數據庫,集合將存放在 test 數據庫中。
查看全部數據庫: show dbs
刪除數據庫: db.dropDatabase()
,你可使用 db 命令查看當前數據庫名。
建立集合: db.createCollection(集合名稱)
查看已有集合: show collections
刪除集合:db.集合名稱.drop()
若是成功刪除選定集合,則 drop()
方法返回 true
,不然返回 false
。
插入文檔:db.集合名稱.insert(document)
。往指定集合插入文檔,文檔的數據結構和 JSON
基本同樣。
更新文檔: update()
方法用於更新已存在的文檔,語法格式:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
query
: update的查詢條件,相似sql update查詢內where後面的。update
: update的對象和一些更新的操做符(如$,$inc...)等,也能夠理解爲sql update查詢內set後面的。
upsert
: 可選,這個參數的意思是,若是不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。
multi
: 可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。
writeConcern
:可選,拋出異常的級別。
db.collection.remove( <query>, <justOne> )
參數說明
query
:(可選)刪除的文檔的條件。
justOne
: (可選)若是設爲 true 或 1,則只刪除一個文檔,若是不設置該參數,或使用默認值 false,則刪除全部匹配條件的文檔。
writeConcern
:(可選)拋出異常的級別。
刪除集合全部數據:db.collection.remove({})
查詢文檔:db.collection.find(query, projection)
參數說明
query
:可選,使用查詢操做符指定查詢條件。
projection
:可選,使用投影操做符指定返回的鍵。查詢時返回文檔中全部鍵值, 只需省略該參數便可(默認省略)。
PS
:
若是你須要以易讀的方式來讀取數據,可使用 pretty()
方法,語法格式以下:
db.col.find().pretty()
pretty()
方法以格式化的方式來顯示全部文檔。
db.collection.findOne()
方法一:
mongoDB
官方提供的 node mongodb driver
包 mongoDB
,這種方法是官方提供的,感興趣的同窗能夠去 npm 官網查找文檔,這裏推薦下面一種方法。方法二:
mongoose
Mongoose
是在 node.js
環境下對 mongodb
進行便捷操做的對象模型工具。
官方 api 文檔
下面說明下 mongoose
的具體用法。
mongoose
npm install mongoose
安裝完成後,打開mongodb。命令行敲入:mongod
,便可打開 mongodb
新建一個js文件,引入mongoose,這裏能夠參照官網 寫的一個 hello world
。
const mongoose = require('mongoose') // 鏈接數據庫 mongoose.connect('mongodb://數據庫地址(包括端口號)/數據庫名稱', (err, ret) => { if (err) { console.log('鏈接失敗') } else { console.log('鏈接成功') } })
這樣,咱們就能夠鏈接上數據庫了,注意:若是沒有指定數據庫名稱,則默認鏈接 test
數據庫。
Schema
,設計文檔結構Schema
究竟是個什麼東西呢,咱們在往數據庫插入數據以前是否是應該得稍微設計下文檔的結構,也就是關係數據庫中表的結構啥的,由於有必定的設計才使得數據的完整性,不會產生髒數據,Schema就是用來幹這個事情的,咱們看下官方的介紹
Schema
主要用於定義 MongoDB
中集合 Collection
裏文檔 document
的結構。mongoose
對錶結構的定義,每一個 Schema
會映射到mongodb中的一個 collection
,Schema
不具有操做數據庫的能力。
定義Schema
很是簡單,指定字段名和類型便可,支持的類型包括如下8種:
String 字符串 Number 數字 Date 日期 Buffer 二進制 Boolean 布爾值 Mixed 混合類型 ObjectId 對象ID Array 數組
經過mongoose.Schema
來調用Schema,而後使用new方法來建立schema
// 引入Schema const Schema = mongoose.Schema // 經過 new 建立一個Schema const userSchema = new Schema({ // 這裏來設計文檔的結構,後面插入集合的每個文檔必須是如下指定的結構 name: { type: String, required: true // 規定 name 是必須有的字段 }, password: { type: String, required: true }, email: { type: String } })
經過以上的實例,咱們就建立了一個 userSchema
的架構,規定了每一個文檔中必須有 name
, password
字段,且類型爲 String
,email
字段類型爲 String
,有或沒有均可以。
Schema
發佈爲 model
(模型)簡單說就是model
是由 Schema
生成的模型,能夠對數據庫的操做。model的每個實例(instance)就是一個文檔。
把 Schema 發佈爲模型只需調用mongoose的 mongoose.model()
方法便可,mongoose.model()
接收兩個參數,第一個參數表示模型的名稱,第二個參數是 Schema,返回值爲模型構造函數。這裏必定得把第一個參數設置成和 mongoose.model()
的返回值相同,不然會出錯。最後獲得的集合名稱就爲模型名稱的小寫形式,若是模型名稱最後一個字符是字母,則變成複數形式,若是最後一個是數字,則不變,好比:模型名稱:User
,獲得的集合名稱爲: users
,模型名稱爲:User1
, 獲得的集合名稱爲;user1
。
// 把Schema 發佈爲模型 const User = mongoose.model('User', userSchema)
好了,咱們通過以上的步驟,最後就能夠經過 User
模型構造函數操做數據庫了。
實例化一個模型構造函數就獲得一個具體文檔。
const user = new User({ // 傳入具體的數據信息,必須和以前的Schema 配置的結構一致 name: 'pubdreamcc', password: '123456', email: '333@pubdreamcc.com' // 無關緊要 }) // 經過save()方法持久化存儲數據 user.save((err, ret) => { if (err) { console.log('保存失敗') } else { console.log('保存成功') console.log(ret) // ret 就是剛新增長的文檔 } })
ok, 經過上面兩步咱們就已經保存了一條數據到數據庫中了,就是怎麼簡單。
查詢數據這裏有好幾個 API , 能夠看下 mongoose 的官網:
具體的用法和以前在控制檯 操做mongoDB 數據相似,不清楚的同窗能夠查看本章第一節知識點: mongoDB數據庫的使用
這裏選取一個findOne表明
User.findOne({name: 'pubdreamcc'}, (err, ret) => { if (err) { console.log('查詢失敗') } else { console.log(ret) // ret 即爲查詢出來的那一條文檔 } })
findOne()
會查找匹配的第一個文檔出來,一般傳入一個查找條件(對象),這裏是從數據庫查找 name
爲 pubdreamcc
的文檔出來。
刪除數據一樣也有好幾個方法,這裏參照官網 api :
用法其實和更新數據,包括前面說到的查找數據相似,remove()
會刪除全部匹配的所有文檔,findOneAndRemove()
會刪除匹配的第一個文檔,findByIdAndRemove()
經過惟一的id值刪除某一個文檔。
這裏選取findByIdAndRemove()
來講明,其餘的小夥伴能夠去 mongoose
官網 api
查詢,我就再也不反覆說了,用法很簡單,你們看一下都懂的。
mongoose 官網 api: api document
User.findByIdAndRemove('id值', (err, ret) => { if (err) { console.log('刪除失敗') } else { console.log('刪除成功') console.log(ret) // ret 即爲刪除信息反饋對象,包括成功刪了幾條數據等 } })
更新數據也有幾個 api 能夠供咱們使用,我就羅列下,而後也是選取一個加以說明,其餘的小夥伴們能夠去官網查看 api 便可。
這裏選取 update()
來演示下:
User.update({name: 'pubdreamcc'}, {email: '111@pubdreamcc.com'}, (err, ret) => { if (err) { console.log('更新失敗') } else { console.log('更新成功') } })
update()
方法會把全部知足條件的數據都更新,上面咱們已經把 name
爲: pubdreamcc
的全部文檔的email
都修改成 111@pubdreamcc.com
。
本文也是我查閱相關資料,看了不少mongoDB的資料總結而來,若是有那些地方有差錯,歡迎留言評論。
須要演示的源代碼能夠去GitHub倉庫查看。
ok,that's all , thank you !