Bootstrap

mongoose的模块化及Model静态方法和实例方法的扩展

mongoose模块化的步骤

  • 第一步 封装mongoose连接mongodb数据库的方法
  • 第二步 封装collection结合对应模块的Model
  • 第三步 使用Model

封装链接方法

// db.js
const mongoose= require("mongoose")

mongoose.connect("mongodb://127.0.0.1:27017/pmis", (err) => {
    if (err) {
        console.log(err)
        return 
    } else {
        console.log("数据库链接成功")
    }
})

module.exports = mongoose

封装Model方法

// user.js
const mongoose = require("./db.js")

var userSchema = mongoose.Schema({
    name: String,
    age: Number,
    sex: Number
})

var UserModel = mongoose.model('User', userSchema, 'user')

module.exports = UserModel

使用Model方法

// app.js
const UserModel = require("./user.js")
UserModel.findOneAndDelete({"name":"zhangsan11111"}, (err, data) => {
    if(err) {
        console.log(err)
        return
    }
    console.log(data)  
})

Model的静态方法和实例方法

拓展静态方法

  • schema添加静态方法时通过statics关键字添加
userSchema.statics.findByName = function (name, cb) {
    // this指向userModel本身
    this.find({"name":name}, (err, data) => {
        cb(err, data)        
    })
}

UserModel.findByName('张三', (err, data) => {
    if(err) {
        console.log(err)
        return
    }
    console.log(data)
})

拓展实例方法

  • schema添加实例方法时通过methods关键字添加(基本不用)
userSchema.methods.printName = function () {
    // this指向userModel的实例对象
    console.log(this.name)
}

var user = new UserModel({
    name: '张三',
    loginName: 'zhangsan',
    age: 20,
    sex: 1
})

user.printName() // 张三

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;