索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快,MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。
Mongoose 中除了以前创建索引的方式,也可以在定义 Schema 的时候指定创建索引。
// 定义schema时添加索引
var UserSchema=mongoose.Schema({
name:{
type:String,
// 普通索引
index:true
},
sn:{
type:String,
// 唯一索引
unique:true
},
age:Number,
status:{
type:Number,
default:1
}
})
https://mongoosejs.com/docs/queries.html
1. Model.find()
2. Model.findById()
3. Model.findByIdAndDelete()
4. Model.findByIdAndRemove()
6. Model.findByIdAndUpdate()
7. Model.findOne()
8. Model.findOneAndDelete()
9. Model.findOneAndRemove()
10. Model.findOneAndUpdate()
11. Model.updateMany()
12. Model.updateOne()
13. Model.deleteMany()
14. Model.deleteOne()
15. Model.replaceOne()
为 schema 添加静态方法时通过statics关键字添加,添加实例方法通过methods 关键字添加。
// 引入自定义的连接数据库文件
var mongoose=require('./db.js');
// 定义schema时添加索引
var UserSchema=mongoose.Schema({
name:{
type:String,
// 普通索引
index:true
},
sn:{
type:String,
// 唯一索引
unique:true
},
age:Number,
status:{
type:Number,
default:1
}
})
// 添加一个按 sn 查找数据的静态方法
UserSchema.statics.findBySn=function(sn,cb){
// this 指向当前的 model
this.find({"sn":sn},function(err,docs){
cb(err,docs)
})
}
// 实例方法 (基本没啥用)
UserSchema.methods.print=function(){
console.log(this.name)
}
module.exports=mongoose.model('User',UserSchema,'user');
页面使用时
// 引入定义模型文件
var UserModel=require('./model/user.js');
UserModel.findBySn('123456',function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
// 按sn所查找到的数据
});
var user = new UserModel({
name: '赵六',
sn:'12345678',
age: 29
});
user.print();
// 赵六