• 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})
  • 相关阅读:
    从头梳理一下经常问到的 “零拷贝” 问题!
    Redis缓存使用中的热key问题
    使用Redis,你必须知道的21个注意要点
    一文理解 Redis 的核心原理与技术!
    大厂常问的Redis面试题
    三种不同场景下的 Kubernetes 服务调试方法
    Docker 和 Kubernetes:root 与特权
    DRBD详细解说及配置过程记录
    MySQL 高可用方案-PXC环境部署记录
    MySQL高可用方案
  • 原文地址:https://www.cnblogs.com/LO-ME/p/10876969.html
Copyright © 2020-2023  润新知