使用Mongoose類庫實現簡單的增刪改查
Mongoose是在nodejs環境中對MongoDB資料庫操作的封裝,一種物件模型工具,可以將資料庫中的資料轉換為javascript物件供我們使用。
Mongoose安裝
npm install mongoose
安裝成功後,我們就可以使用 require('mongoose')來使用了;
下面是連結本地資料庫 mongoosedb,程式碼如下:
var mongoose = require('mongoose'); var DB_URL = 'mongodb://localhost:27017/dataDb'; /* 連結 */ mongoose.connect(DB_URL); /* 連結成功 */ mongoose.connection.on('connected', function() { console.log('Mongoose connection open to ' + DB_URL); }); // 連結異常 mongoose.connection.on('error', function(err) { console.log('Mongoose connection error:' + err); }); // 連結斷開 mongoose.connection.on('disconnected', function() { console.log('Mongoose connection disconnected'); });
如下圖所示
從如上程式碼,監聽了幾個事件,並且執行觸發了connected事件,這表示連線成功。
2. Schema介紹
它是一種以檔案形式儲存的資料庫模型骨架,不具備對資料庫操作的能力,僅僅只是資料庫在程式片段中的一種表現,可以理解為表結構。
那麼如何去定義一個Schema呢?請看如下程式碼:
var mongoose = require('mongoose'); var TestSchema = new mongoose.Schema({ name: { type: String }, // 屬性name,型別為String age: { type: Number, default: 30 }, // 屬性age,型別為Number,預設值為30 time: { type: Date, default: '當前時間' } });
如上在我們的TestSchema中每個key在我們的檔案將被轉換為相關的SchemaType定義的一個屬性。允許使用的SchemaTypes有如下型別:
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
如果我們在如上編寫完成後,我們需要新增額外的鍵的話,我們可以使用Schema中的add方法.
3. 建立一個模型
我們上面定義了Schema,我們需要將我們的TestSchema轉成我們可以使用的模型,模型具有對資料庫操作的能力。
我們可以通過 mongoose.model(modelName, schema);
先來結合schema和建立一個模型來簡單的看一個demo,如下程式碼:
var mongoose = require('mongoose'); // schema定義 var TestSchema = new mongoose.Schema({ name: { type: String }, age: { type: String }, sex: { type: String } }); // 建立model var TestModel = mongoose.model('test1', TestSchema); // 初始化資料 var TestInt = new TestModel({ name: 'kongzhi', age: '30', sex: 'girl' }); console.log(TestInt.name); // kongzhi console.log(TestInt.age); // 30 console.log(TestInt.sex); // girl
下面我們來簡單的使用上面定義的內容,來做個簡單的資料庫增刪改查的操作。
1. 在專案中的根目錄下新建一個db.js, 程式碼如下:
var mongoose = require('mongoose'); var DB_URL = 'mongodb://localhost:27017/dataDb'; /* 連結 */ mongoose.connect(DB_URL); /* 連結成功 */ mongoose.connection.on('connected', function() { console.log('Mongoose connection open to ' + DB_URL); }); // 連結異常 mongoose.connection.on('error', function(err) { console.log('Mongoose connection error:' + err); }); // 連結斷開 mongoose.connection.on('disconnected', function() { console.log('Mongoose connection disconnected'); }); module.exports = mongoose;
2. 下面我們新建一個user的Schema,命名為user.js, 它有如下屬性,如下程式碼:
/* 定義一個user的Schema */ var mongoose = require('./db.js'); var Schema = mongoose.Schema; var UserSchema = new Schema({ username: { type: String }, // 使用者名稱 password: { type: String }, // 密碼 age: { type: Number }, // 年齡 }); /* model 是由schema生成的模型,具有對資料庫操作的能力 */ module.exports = mongoose.model('User', UserSchema);
3. 資料庫操作,我們新建一個檔案叫 app.js
3.1 插入資料(Model.save([fn])),程式碼如下:
var User = require('./user.js'); // 插入資料 var user = new User({ username: 'kongzhi0707', password: '123456', age: 30 }); user.save(function(err, res) { if (err) { console.log(err); } else { console.log(res); } });
然後在命令列中執行app.js ,可以看到如下:
然後我們再到本地資料庫中檢視資料,可以看到新增一條資料,如下圖所示
從資料庫中可以看到插入資料成功了;
3.2 更新資料(Model.update(conditions, doc, [options], [callback]))
conditions: 更新的條件,該值是一個物件。
doc: 需要更新的內容,該值也是一個物件。
options: 可選引數,它有如下屬性:
safe :(布林型)安全模式(預設為架構中設定的值(true))
upsert :(boolean)如果不匹配,是否建立文件(false)
multi :(boolean)是否應該更新多個文件(false)
runValidators:如果為true,則在此命令上執行更新驗證程式。更新驗證器根據模型的模式驗證更新操作。
strict:(布林)覆蓋strict此更新的選項
overwrite: (布林)禁用只更新模式,允許您覆蓋文件(false)
callback: 回撥函式
如下程式碼執行更新:
var User = require('./user.js'); // 更新資料 function update() { // 更新資料的條件查詢 var wherestr = {'username': 'kongzhi0707'}; // 執行更新資料 var updatestr = {'password': 'abcdef'}; User.update(wherestr, updatestr, function(err, res) { if (err) { console.log(err); } else { console.log(res); } }); } // 呼叫更新函式 update();
執行app.js 後,如下圖所示:
繼續檢視資料庫,可以看到password欄位被更新了,如下圖所示:
3.3 findByIdAndUpdate(id, [update], [options], [callback]);
根據id進行更新;此id就是資料庫中自動生成的id;如下程式碼,
var User = require('./user.js'); // 更新資料 function update() { // 更新資料的條件查詢 var id = '5b3a4941ca11752732fee772'; // 執行更新資料 var updatestr = {'password': 'vvvvv'}; User.findByIdAndUpdate(id, updatestr, function(err, res) { if (err) { console.log(err); } else { console.log(res); } }); } // 呼叫更新函式 update();
如下圖資料庫顯示如下:
3.4 刪除 Model.remove(conditions, [callback])
程式碼如下:
var User = require('./user.js'); function del() { // 刪除資料的條件 var wherestr = {'username': 'kongzhi0707'}; User.remove(wherestr, function(err, res) { if (err) { console.log(err); } else { console.log(res); } }); } // 呼叫函式 del();
到資料庫中檢視資料,可以看到沒有這條資料了;
3.5 條件查詢 Model.find(conditions, [fields], [options], [callback]);
如下程式碼所示:
var User = require('./user.js'); function find() { // 刪除資料的條件 var wherestr = {'userName': '龍恩0707'}; User.find(wherestr, function(err, res) { if (err) { console.log(err); } else { console.log(res); } }); } // 呼叫函式 find();
執行後,如下所示:
3.6 數量查詢 Model.count(conditions, [callback])
var User = require('./user.js'); function getCountByConditions() { User.count({}, function(err, res) { if (err) { console.log(err); } else { console.log(res); // 會輸出資料庫資料的數量 } }); } // 呼叫函式 getCountByConditions();