一、準備工作
1. 啟動mongo數據庫
mongod
2. 新建數據庫
cmd + n
新建終端窗口
// 使用終端操作數據庫
mongo
// 創建mongoosetest數據庫
use mongoosetest
二、利用mongoose進行簡單的數據庫操作
1. 新建項目
- 新建空文件夾,命名為
mongooseTest
cd - 啟動終端,進入該文件夾
- 在命令行中輸入
npm init
初始化項目
npm init
- 下載依賴包
cnpm i mongoose -s
2. 連接數據庫
在根目錄下創建 db.js
,輸入以下代碼,監聽 connection
的幾個事件,如果以上操作都沒錯的話,那么就會監聽第一個事件 connect
事件,表示連接數據庫成功,在最后,我們導出 mongoose對象
,以供其他模塊使用。
const mongoose = require('mongoose');
//設置mongo存儲路徑
const dbUrl = 'mongodb://localhost:27017/mongoosetest';
mongoose.connect(dbUrl, {useMongoClient: true})
// 連接成功
mongoose.connection.on('connected', () => {
console.log('MongoDB connected success.')
})
// 連接異常
mongoose.connection.on('error', () => {
console.log('MongoDB connected error.')
})
// 連接斷開
mongoose.connection.on('disconnected', () => {
console.log('MongoDB connected disconnected.')
})
//導出mongoose對象
module.exports = mongoose
運行db.js,如下圖所示:
3. 新建Schema與發布Model
那么什么是 Schema
呢? schema
是 mongoose
里會用到的一種數據模式,可以理解為我們傳統數據庫中的表(table)結構的定義,簡單地說,就是一個數據模板,每個 schema
會映射到 mongodb
中的一個
collection
,它不具備操作數據庫的能力。
那什么又是 Model
呢? Model
是由 Schema
發布生成的模型,具有抽象屬性和行為的數據庫操作對,
Model
可以直接操作 Mongo
數據庫中的數據。
解釋完了代碼用說話,新建 user.js
,輸入以下代碼,創建一個 user
的 schema
,并且利用 Schema
發布一個 Model
,導出 Model
:
// 引入之前我們創建的mongose對象
const mongoose = require('./db')
// 創建一個schema對象
const Schema = mongoose.Schema
// 創建一個schema實例
let UserSchema = new Schema({
username: {type: String},
userpwd: {type: String},
userage: {type: Number},
logindate: {type: Date}
})
// 利用UserSchema實例,發布一個User的model并且導出
module.exports = mongoose.model('User',UserSchema)
4. Model創造Entity實體,對數據庫操作
那 Entity
又是什么呢? Entity
是由 Model
創建的實體,他的操作也會影響數據庫。
新建 insert.js
,輸入以下代碼:
// 引入User的Model
const User = require('./user')
//創建一個插入數據到數據庫中的函數
function insert() {
// 用Model創建一個Entity實體,就是一個User的數據
let user_1 = new User({
username: 'Snow',
userpwd: '123456',
userage: 20,
logindate: new Date()
})
// 調用user_1的save方法,插入user_1的數據到數據庫中
user_1.save(function (err, res) {
if(err){
console.log("Error: " + err)
}else{
console.log("Success Res: " + res)
}
})
}
// 執行插入操作
insert()
以上代碼中的 user_1
就是 Model
創建的 Entity
實體,它具有很多操作, svae()
只是其中一個。
運行insert.js,命令行輸入框得到以下結果:
我們再查看數據庫中:
// 查看users集合中的數據
db.users.find()
成功插入一個數據啦~
5. 總結Schema、Model、Entity的關系
Schema : 一種以文件形式存儲的數據庫模型骨架,不具備數據庫的操作能力
Model : 由Schema發布生成的模型,具有抽象屬性和行為的數據庫操作對
Entity : 由Model創建的實體,他的操作也會影響數據庫
Schema、Model、Entity的關系是:Schema生成Model,Model創造Entity,Model和Entity都可對數據庫操作造成影響,但Model比Entity更具操作性。
三、mongoose的其他操作
更新數據
這里我們是直接用Model來操作數據庫,新建update.js
// 引入User的Model
const User = require("./user")
function update(){
// wherestr是我們要進行操作的數據
let wherestr = {'username' : 'Snow'}
// update是我們更新的數據
let updatestr = {'userpwd': 'hhhhhh'}
User.update(wherestr, updatestr, function(err, res){
if (err) {
console.log("Error:" + err)
}
else {
console.log("Update Res: " + res)
}
})
}
update()
刪除數據
新建remove.js,輸入以下代碼:
const User = require("./user")
function del() {
//需要刪除的數據
let wherestr = {'username' : 'Snow'}
User.remove(wherestr,function (err, res) {
if(err){
console.log("Error: " + err)
}else{
console.log("Success Remove: " + res)
}
})
}
del()