Mongoose 索引介绍
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快(如果有些字段是用不着的就不要设置索引)。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询 优化技巧。
mongoose 中除了以前创建索引的方式,我们也可以在定义 Schema 的时候指定创建索引
Mongoose 索引的使用
先初始化项目还是一个app.js和一个model文件夹,分别由db.js(连接数据库),users.js(操作users集合的Schema)
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, (err) => {
if(err){
return console.log(err);
}
console.log('数据库连接成功')
});
module.exports = mongoose
let mongoose = require('./db')
let UserSchema = mongoose.Schema({
name: {
type: String,
trim: true
},
age: Number,
status: {
type: Number,
default: 1
}
})
// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');
module.exports = UserModel
let UserModel = require('./model/users')
// 查询users表的数据
UserModel.find({}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})
基础搭建好之后,设置索引示在具体集合中的Schema中去设置,比如给users集合设置索引,就在users.js这个模块的Schema中设置
设置普通索引
let mongoose = require('./db')
let UserSchema = mongoose.Schema({
name: {
type: String,
trim: true,
index: true // 设置普通的索引
},
age: Number,
status: {
type: Number,
default: 1
}
})
// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');
module.exports = UserModel
然后再我们执行数据库操作(增删改查)的时候会检查这个集合有没有索引,如果没有就会增加
let UserModel = require('./model/users')
// 查询users表的数据
UserModel.find({}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})
运行app.js之后我们再去获取users的所有看看,结果是设置成功的

设置多个索引
let mongoose = require('./db')
let UserSchema = mongoose.Schema({
name: {
type: String,
trim: true,
index: true // 设置普通的索引
},
age: {
type: Number,
index: true // 设置普通的索引
},
status: {
type: Number,
default: 1
}
})
// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');
module.exports = UserModel

设置唯一索引,先删除之前设置的索引,再删除索引的时候需要注意,如果设置了多个索引(不是一起设置的,删除的时候也要分开删除)
db.users.dropIndex({"name":1})
db.users.dropIndex({"age":1})

let mongoose = require('./db')
let UserSchema = mongoose.Schema({
name: {
type: String,
trim: true,
unique: true // 设置唯一的索引
},
age: {
type: Number
},
status: {
type: Number,
default: 1
}
})
// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');
module.exports = UserModel
// db.users.dropIndex({"name":1})
// db.users.dropIndex({"age":1})