zoukankan      html  css  js  c++  java
  • 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})
  • 相关阅读:
    基于BGP/EVPN控制平面的VXLAN anycast-VTEP anycast-gateway基本配置
    NetworkManager配置VRF
    IBGP Segment Routing AIGP属性
    EBGP segment routing
    CentOS8创建网桥
    F5 HTTP response body rewrite
    OSPF Segment Routing和MPLS基本配置
    L2TP 和 IPsec over L2TP
    nmap
    LINUX DNS客户端 解析域名慢的问题。
  • 原文地址:https://www.cnblogs.com/LO-ME/p/10876969.html
Copyright © 2011-2022 走看看