一、Mongoose 索引

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询 优化技巧。

mongoose 中除了以前创建索引的方式,我们也可以在定义 Schema 的时候指定创建索引。

var DeviceSchema = new mongoose.Schema({
    sn: {
        type: Number, // 唯一索引 
        unique: true
    }, name: {
        type: String, // 普通索引
        index: true
    }
});

 

二、Mongoose 内置 CURD

https://mongoosejs.com/docs/queries.html

 

Model.deleteMany() 
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove() 
Model.findByIdAndUpdate() 
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove() 
Model.findOneAndUpdate() 
Model.replaceOne()
Model.updateMany()
Model.updateOne()

 

三、扩展 Mongoose CURD 方法

var mongoose = require('./db.js');
var UserSchema = mongoose.Schema({
    name: {
        type: String
    }, age: Number, status: {
        type: Number,
        default: 1
    }
})
// 静态方法 UserSchema.statics.findByUid=function(uid,cb){
this.find({"_id": uid}, function (err, docs) {
    cb(err, docs)
})
}// 实例方法 
UserSchema.methods.print = function () {
    console.log('这是一个实例方法');
    console.log(this);
}
;
module.exports = mongoose.model('User', UserSchema, 'user');

demo

user.js

var mongoose=require('./db.js');


var UserSchema=mongoose.Schema({
    
    name:{
        type:String       
    },
    sn:{
        type:String,
        index:true
    },
    age:Number,       
    status:{
        type:Number,
        default:1

    }
})
//静态方法 

UserSchema.statics.findBySn=function(sn,cb){


    //通过 find方法获取 sn的数据    this 关键字获取当前的model


    this.find({"sn":sn},function(err,docs){
        cb(err,docs)
    })   


}

// 实例方法   (基本不用)

UserSchema.methods.print=function(){


    console.log('我是一个实例方法')

    console.log(this.name)
}

module.exports=mongoose.model('User',UserSchema,'user');

使用:

var UserModel = require('./model/user.js');


// var user = new UserModel({
//     name: '赵六',
//     sn:'123456781',
//     age: 29
// });
// user.save();


// UserModel.findBySn('123456781',function(){})


UserModel.findBySn('123456782', function (err, docs) {

    if (err) {

        console.log(err);

        return;
    }
    console.log(docs)
})


var user = new UserModel({
    name: '赵六',
    sn: '123456781',
    age: 29
});
// user.save();


user.print();//自定义的实例方法