使用Mongoose類庫實現簡單的增刪改查

使用Mongoose類庫實現簡單的增刪改查javascript

Mongoose是在nodejs環境中對MongoDB數據庫操做的封裝,一種對象模型工具,能夠將數據庫中的數據轉換爲javascript對象供咱們使用。html

Mongoose安裝java

npm install mongoose

安裝成功後,咱們就可使用 require('mongoose')來使用了;node

下面是連接本地數據庫 mongoosedb,代碼以下:mongodb

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事件,這表示鏈接成功。npm

2. Schema介紹
它是一種以文件形式存儲的數據庫模型骨架,不具有對數據庫操做的能力,僅僅只是數據庫在程序片斷中的一種表現,能夠理解爲表結構。
那麼如何去定義一個Schema呢?請看以下代碼:api

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();
相關文章
相關標籤/搜索