Mongoose 索引

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

 

posted @ 2019-05-16 17:33  胡椒粉hjf  阅读(848)  评论(0编辑  收藏  举报