web前端技術Mongoose詳解
簡介
之前我們都是通過shell來完成對資料庫的各種操作的,在開發中大部分時候我們都需要通過程式來完成對資料庫的操作。
而Mongoose就是一個讓我們可以通過Node來操作MongoDB的模組。
Mongoose是一個物件文件模型(ODM)庫,它對Node原生的MongoDB模組進行了進一步的優化封裝,並提供了更多的功能。
在大多數情況下,它被用來把結構化的模式應用到一個MongoDB集合,並提供了驗證和型別轉換等好處。
mongoose的好處
可以為文件建立一個模式結構(Schema)
可以對模型中的物件/文件進行驗證
資料可以通過型別轉換轉換為物件模型
可以使用中介軟體來應用業務邏輯掛鉤
比Node原生的MongoDB驅動更容易
新的物件
mongoose中為我們提供了幾個新的物件– Schema(模式物件)
Schema物件定義約束了資料庫中的文件結構– Model
Model物件作為集合中的所有文件的表示,相當於MongoDB資料庫中的集合collection– Document
Document表示集合中的具體文件,相當於集合中的一個具體的文件
通過mongoose連線MongoDB
使用Mongoose必須先安裝mongoose包– npm install mongoose
載入Mongoose– const mongoose = require("mongoose")
連線資料庫– mongoose.connect("mongodb://地址")– 地址例子:mongodb://127.0.0.1/mg_test
斷開連線– mongoose.disconnect()
connection
一旦連線了MongoDB資料庫,底層的Connection物件就可以通過mongoose模組的conection屬性來訪問。
connection物件是對資料庫連線的抽象,它提供了物件連線、底層的Db物件和表示結合的Model物件的訪問。
並且可以對connection物件上的一些事件進行監聽,來獲悉資料庫連線的開始與端開。
比如,可以通過open和close事件來監控連線的開啟和關閉。
Schema模式物件
使用Mongoose你必須經常定義模式。
模式為集合中的文件定義欄位和欄位型別。
如果你的資料是被結構化成支援模式的,這是非常有用的。
簡單來說,模式就是對文件的約束,有了模式,文件中的欄位必須符合模式的規定。
否則將不能正常操作。
定義模式
模式為集合中的文件定義欄位和欄位型別。
對於在模式中的每個欄位,你都需要定一個特定的值型別。受支援的型別如下:– String– Number– Boolean– Array– Buffer– Date– ObjectId或Oid– Mixed
需要為你計劃使用的每個不同的文件型別都定義一個模式。前端培訓
建立模式定義
模式需要通過mongoose的Schema屬性來建立,這個屬性是一個建構函式。– new Schema(definition,option)
definition(描述模式)
options 配置物件,定義與資料庫中集合的互動
options常用選項
autoIndex– 布林值,開啟自動索引,預設true
bufferCommands– 布林值,快取由於連線問題無法執行的語句,預設true
capped– 集合中最大文件數量
collection– 指定應用Schema的集合名稱
id– 布林值,是否有應用於_id的id處理器,預設true
_id– 布林值,是否自動分配id欄位,預設true
strict– 布林值,不符合Schema的物件不會被插入進資料庫,預設true
Model模型物件
一旦定義好了Schema物件,就需要通過該Schema物件來建立Model物件。
一旦建立好了Model物件,就會自動和資料庫中對應的集合建立連線,以確保在應用更改時,集合已經建立並具有適當的索引,且設定了必須性和唯一性。
Model物件就相當於資料庫中的集合,通過Model可以完成對集合的CRUD操作。
Model模型物件
建立模型物件需要使用mongoose的model()方法,語法如下:– model(name, [schema], [collection] , [skipInit])
name引數相當於模型的名字,以後可以同過name找到模型。
schema是建立好的模式物件。
collection是要連線的集合名。
skipInit是否跳過初始化,預設是false。
一旦把一個Schema物件編譯成一個Model物件,你就完全準備好開始在模型中訪問、新增、刪除、更新和刪除文件了。也就是說有了模型以後我們就可以操作資料庫了。
Model物件的方法
remove(conditions, callback)
deleteOne(conditions, callback)
deleteMany(conditions, callback)
find(conditions, projection, options, callback)
findById(id, projection, options, callback)
findOne(conditions, projection, options, callback)
count(conditions, callback)
create(doc, callback)
update(conditions, doc, options, callback)
等等
Document文件物件
通過Model對資料庫進行查詢時,會返回Document物件或Document物件陣列。
Document繼承自Model,代表一個集合中的文件。
Document物件也可以和資料庫進行互動操作。
Document物件的方法
equals(doc)
id
get(path,[type])
set(path,value,[type])
update(update,[options],[callback])
save([callback])
remove([callback])
isNew
isInit(path)
toJSON()
toObject()