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})