MongoDB學習筆記二 Mongoose
Mongoose 簡介
- 之前我們都是通過
shell來完成對資料庫的各種操作, 在開發中大部分時候我們都需要通程序式來完成對資料庫的操作 - 而
Mongoose就是一個讓我們可以通過Node來操作MongoDB的模塊 - Mongoose是一個物件檔案模型
(ODM)庫,它對Node原生的MongoDB模塊進行了進一步的優化封裝, 并提供了更多的共嗯那個 - 在大多數情況下, 它被用來把結構化的模式應用到一個MongoDB集合, 并提供了驗證和型別轉換等好處
Mongoose的好處
- 可以為檔案創建一個模式結構
(Schema)- 約束 - 可以對模型中的物件/檔案進行驗證
- 資料可以通過型別轉換轉換為物件模型
- 可以使用中間件來應用業務邏輯掛鉤
- 比Node原生的MongoDB驅動更容易
新的物件
- mongoose中為我們提供了幾個新的物件
- Schema物件定義約束了資料庫中的檔案結構
- Model
- Model 物件作為集合中的所有檔案的表示, 相當于MongoDB資料庫中的集合
Collection
- Model 物件作為集合中的所有檔案的表示, 相當于MongoDB資料庫中的集合
- Document
- Document表示集合中的具體檔案, 相當于集合中的一個具體的檔案
1. 通過Mongoose連接MongoDB
- 使用Mongoose必須先安裝
mongoose包npm install mongoose
- 加載Mongoose
const mongoose = require("mongoose");
- 連接資料庫
mongoose.connect("mongodb://地址")- 地址例子:
mongodb://127.0.0.1/test
- 斷開連接
mongoose.disconnect()
**注意**: 如果埠號是默認埠號(27017) 則可以省略不寫
2. 監聽MongoDB資料庫的連接狀態 - connection
connection
- 一旦連接了MongoDB資料庫, 底層的
Connection物件就可以通過mongoose模塊的connection屬性來訪問 connection物件是對資料庫連接的抽象, 它提供了物件連接、底層的Db物件和表示結合的Model物件的訪問- 并且可以對
connection物件上的事件進行監聽, 來獲悉資料庫連接的開始與斷開 - 比如, 可以
open和close事件來監控連接的打開和關閉
以上都是官方的廢話, 簡單來說?:
- 在mongoose物件中, 有一個屬性叫做connection, 該屬性表示的就是資料庫連接
- 通過監視該物件的狀態, 可以來監聽資料庫的連接與斷開
資料庫連接成功的事件
mongoose.connection.once("open",function(){});
資料庫連接斷開的事件(一般不需要呼叫)
mongoose.connection.once("close",function(){});
3. helloMongose
// 01- helloMongose.js
// 引入mongoose模塊
const mongoose = require("mongoose");
// 連接資料庫
mongoose.connect("mongodb://localhost:27017/test");
// 測驗是否連接成功
mongoose.connection.once("open", function () {
// 連接成功執行
console.log('連接成功~');
});
執行后可以看到已經成功連接上資料庫了

但是注意: 在上面截圖中我們可以看到有一行錯誤提示:

翻譯過來意思為
- 當前URL字串決議器已棄用,并將在未來版本中洗掉,要使用新的決議器,請將選項{useNewUrlParser: true}傳遞給MongoClient.connect,
- 這個報錯不會影響程式運行, 但是按照規范,我們將代碼改成下面這樣
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
4. 創建Schema 模式物件
- 使用
Mongoose你必須經常定義模式 - 模式為集合中的檔案定義欄位和欄位型別
- 如果你的資料是被結構化成支持模式的, 這是非常有用的
- 簡單來說, 模式就是對檔案的約束, 有了模式, 檔案中的欄位必須符合模式的規定, 否則將不能正常操作
4.1 定義模式
- 模式為集合中的檔案定義欄位和欄位型別
- 對于在模式中的每個欄位, 你都需要定義一個特定的值型別, 受支持的型別如下:
StringNumberBooleanArrayBufferDateObjectId或OidMixed
- 需要為你計劃使用的每個不同的檔案型別都定義一個模式
4.2 創建模式定義
- 模式需要通過
mongoose的Schema屬性來創建, 這個屬性是一個建構式new Schema(definition,option)definition:描述模式options: 配置物件, 定義資料庫中集合的互動
4.3 options常用選項
autoIndex
- 布林值, 開啟自動索引, 默認truebufferCommands
- 布林值, 快取由于連接問題無法執行的陳述句, 默認truecapped
- 集合中最大檔案數量collection
- 指定應用Schema的集合名稱id
- 布林值,是否有應用于_id的id處理器, 默認true_id
- 布林值, 是否自動分配id欄位,默認truestrict
- 布林值, 不符合Schema的物件不會被插入進資料庫,默認true
4.4 代碼
代碼?:
const mongoose = require("mongoose");
// 連接資料庫
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
// 測驗是否連接成功
mongoose.connection.once("open", function () {
// 連接成功執行
console.log('連接成功~');
});
// 創建Schema物件, 賦值給一個變數
const Schema = mongoose.Schema;
// 創建Schema(模式)物件
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type:String,
default:'男'
},
address:String
});
這個時候還不能將資料插入到資料庫中, 還需要定義 Model模型物件
5. Model模型物件
- 創建模型物件需要使用
mongoose的model()方法,語法如下:model(name.[schema],[collection],[skipInit])name:相當于模型的名字, 以后可以通過name找到模型schema: 創建好要應用的模型物件collection: 是要連接的集合名skipInit: 是否跳過初始化, 默認是false
- 一旦把一個
Schema物件編譯成一個Model物件, 你就完全準備好開始在模型中訪問、添加、洗掉、更新和洗掉檔案了, 也就是說有了模型以后我們就可以操作資料庫了
5.1 實作代碼
// 引入mongoose模塊
const mongoose = require("mongoose");
// 連接資料庫
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
// 測驗是否連接成功
mongoose.connection.once("open", function () {
// 連接成功執行
console.log('連接成功~');
});
// 創建Schema物件, 賦值給一個變數
const Schema = mongoose.Schema;
// 創建Schema(模式)物件
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type:String,
default:'男'
},
address:String
});
// 通過Scheme來創建Model
// Model代表的是資料庫中的集合, 通過Model才能對資料庫進行操作
// mongoose.model(modelName,schema);
// modelName: 就是要映射的集合名稱, mongoose會自動將集合名變成復數
// schema: 創建的Schema物件
const stuModel = mongoose.model('student', stuSchema);
// 向資料庫中插入一個檔案
// stuModel.create(doc,function(err){})
stuModel.create({
name: '小明',
age: 18,
gender: '男',
address:'上海'
}, function (err) {
if (!err) {
console.log('插入成功');
}
})
運行結果:

點開資料庫后可以發現資料已經插入成功了

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308486.html
標籤:NoSQL
上一篇:MySQL MHA 運行狀態監控
