专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

nodejs操作MongoDB之三(关于schema的使用)

一、schema默认参数

很多时候我们会设置默认参数,不插入数据的时候就默认这个值

  • 1、封装好的连接数据库模块
    // 第一步
    const mongoose = require('mongoose');

    // 第二步连接数据库
    mongoose.connect('mongodb://root:123456@localhost/nest_cms', { useNewUrlParser: true }, (err) => {
        if (err) {
            console.log('连接错误');
            return;
        }
        console.log('mongodb连接成功');
    });

    module.exports = mongoose;

  • 2、定义user模型
    const mongoose = require('./db');

    const UserSchema = mongoose.Schema({
        name: String,
        age: Number,
        status: { // 默认参数
            type: Number,
            default: 1,
        }
    })

    module.exports=mongoose.model('User',UserSchema,'user');

  • 3、使用定义好的模型
    const UserModel = require('./model/user');

    var user = new UserModel({
        name: '李四',
        age: 20
    });
    user.save((err) => {
        if (err) {
            console.log('保存数据错误')
        }
        console.log('保存数据成功');
    });

  • 4、查询数据返回的
    [ { status: 1,
        _id: 5e0fdb9d6e124d1f3096d9f3,
        name: '张三',
        age: 20,
        __v: 0 },
      { status: 1, // 默认插入的是1
        _id: 5e0fdbca98ff701f9006afcd,
        name: '李四',
        age: 20,
        __v: 0 } ]

二、mongoose预定义模式装饰符

  • 1、mongoose中内置的预定义修饰符主要有
    • lowercase
    • uppercase
    • trim
  • 2、在schema中使用
    const mongoose = require('./db');

    const UserSchema = mongoose.Schema({
        name: {
            type: String,
            trim: true,
        },
        age: Number,
        message1: {
            type: String,
            lowercase: true,
        },
        message2: {
            type: String,
            uppercase: true,
        },
        status: {
            type: Number,
            default: 1,
        }
    })

    module.exports=mongoose.model('User',UserSchema,'user');

三、mogoose中预定义的setget修饰符

我们还可以通过 set(建议使用) 修饰符在增加数据的时候对数据进行格式化。也可以通过get(不建议使用)在实例获取数据的时候对数据进行格式化,并不是在查询数据的时候数据格式化。

  • 1、定义schema
    const mongoose = require('./db');

    const NewSchema = mongoose.Schema({
        title: {
            type: String,
            trim: true,
        },
        author: String,
        avatar: {
            type: String,
            set(url) {
                if (!url) {
                    return '';
                }
                if (url.indexOf('http://') !=0 && url.indexOf('https://') !=0) {
                    url = 'http://' + url;
                }
                return url;
            }
        }
    })

    module.exports = mongoose.model('New', NewSchema, 'new');

  • 2、插入一条数据
    const NewModel = require('./model/new');

    const news = new NewModel({
        title: '文章一',
        author: '张三',
        avatar: 'xx.png'
    })

    news.save();

  • 3、查询结果
    {
        "_id" : ObjectId("5e0fe0b971428227107241c1"),
        "title" : "文章一",
        "author" : "张三",
        "avatar" : "http://xx.png",
        "__v" : 0
    }

四、mongodb中的索引

  • 1、索引的作用

    索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查 询优化技巧。

  • 2、创建索引
    db.user.ensureIndex({字段:1}) // 普通索引

  • 3、获取索引
    db.user.getIndexes()

  • 4、删除索引
    db.user.dropIndex({字段:1})

  • 5、复合索引
    // 数字 1 表示 username 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储
    db.user.ensureIndex({"username":1, "age":-1})

  • 6、唯一索引
    db.user.ensureIndex({"userid":1},{"unique":true})

五、mongoose中的schema创建索引

  • 1、定义schema的时候定义唯一索引
    const mongoose = require('./db');

    const UserSchema = mongoose.Schema({
        name: {
            type: String,
            trim: true,
            unique: true, // 创建唯一索引
        },
        age: Number,
        message1: {
            type: String,
            lowercase: true,
        },
        message2: {
            type: String,
            uppercase: true,
        },
        status: {
            type: Number,
            default: 1,
        }
    })

    module.exports=mongoose.model('User',UserSchema,'user');

六、时间的使用

  • 1、定义schema中使用timestamps属性
    var mongoose = require('./db.js');

    var UserSchema = new mongoose.Schema({
      name: String,
      age: Number,
      mobile: Number,
      status: {
        type: Number,
        default: 1
      }
    }, {
      //设置时间戳
      timestamps: true
    });

    module.exports = mongoose.model('User', UserSchema, 'user');

  • 2、创建数据
    const UserModel = require('./model/user');

    const user = new UserModel({
      name: '王五',
      age: 20,
      mobile: 100,
      status: 0
    });

    user.save();

  • 3、查询出创建后的数据
    {
        "_id" : ObjectId("5e12a7f6c63086a54eed0a47"),
        "status" : 0,
        "name" : "王五",
        "age" : 20,
        "mobile" : 100,
        "createdAt" : ISODate("2020-01-06T03:22:30.336Z"), // 与系统默认时间相差8小时
        "updatedAt" : ISODate("2020-01-06T03:22:30.336Z"),
        "__v" : 0
    }

  • 4、修改createdAtupdatedAt显示
    var mongoose = require('./db.js');

    var UserSchema = new mongoose.Schema({
      name: String,
      age: Number,
      mobile: Number,
      status: {
        type: Number,
        default: 1
      }
    }, {
      //设置时间戳
      timestamps: {
        createdAt: 'created_at',
        updatedAt: "updated_at"
      }
    });

    module.exports = mongoose.model('User', UserSchema, 'user');

  • 5、创建出来的数据
    {
        "_id" : ObjectId("5e12ac19a1b9cfab59fbd913"),
        "status" : 0,
        "name" : "马六",
        "age" : 20,
        "mobile" : 100,
        "created_at" : ISODate("2020-01-06T03:40:09.560Z"),
        "updated_at" : ISODate("2020-01-06T03:40:09.560Z"),
        "__v" : 0
    }

  • 6、修改数据
    UserModel.updateOne({ _id: '5e12ac19a1b9cfab59fbd913' }, { name: '王小二' }, (err, docs) => {
      if (err) {
        console.log('修改数据错误', err);
        return;
      }
      console.log(docs)
    })

  • 7、修改后的数据
    {
        "_id" : ObjectId("5e12ac19a1b9cfab59fbd913"),
        "status" : 0,
        "name" : "王小二",
        "age" : 20,
        "mobile" : 100,
        "created_at" : ISODate("2020-01-06T03:40:09.560Z"),
        "updated_at" : ISODate("2020-01-06T03:42:51.022Z"),
        "__v" : 0
    }

七、插件的使用

    // 定义一个插件
    const lastModified = (schema, option) => {
      schema.add({ updated_at: Date });
      schema.pre('updateOne', (next) => {
        this.updated_at = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
        next();
      })
    }

    // 使用插入
    UserSchema.plugin(lastModified);

未经允许不得转载:搜云库技术团队 » nodejs操作MongoDB之三(关于schema的使用)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们