一、索引
//给数据设置索引是为了查询速度变快,如果有的数据不经常查询,可不设置索引,因为会增加数据添加的负担
//设置索引是在生成Schema中设置的
const Schema = mongoose.Schema({
name:{
required:true, //表示这个数据是否是必须输入
type:String,
max:10,最大值,用于Number
min:1,最小值,用于Number
enum:['connect','uncoonect'], //枚举类型,标识值只能是connect或者uncoonect,只能用于
//String类型中
index:true, //创建索引。查询速度会非常快
unique:true, //创建唯一索引,如果两个name值相同则会报错
match:/^\d{11}$/, //输入的数据必须符合正则规则,用于String
maxlength:20, //输入的最大长度,用于String
minlength:10, //输入的最小长度用于String
//自定义验证器,通过则可以增加数据,反之不能
validate: function(desc) {
return desc.length >= 10;
},
set(val){ //自定义修饰符。可对即将存入数据库的数据进行再次加工
return val
}
}
二、创建、删除、查看索引的命令
//创建索引,给name值创建一个索引
db.user.createIndex({name:1})
//创建唯一索引,此时name值是独一无二的,不能有相同的值出现
db.user.createIndex({name:1},{unique:true})
//查询集合的索引有哪些
db.user.getIndexes()
//删除索引
db.user.dropIndex({name:1})
//索引的一些参数:
/**
* background Booleam 创建过程是否阻塞其他数据库操作,可选参数,默认值为false
* unique Booleam 创建的索引是否是唯一索引 默认值为false
* dropDups Booleam 在建立唯一索引时是否删除重复记录,指定为true创建唯一索引,默认值为false
*/
三、查询 explain
/*
*explain 是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用
该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标本身
*/
db.user.find().explain()
如果想查询具体的信息
db.user.find().explain('executionStats')
//关注输出参数executionTimeMillis,是查询所用的时间