猿问

是否可以在模式级别定义使用 mongoose 从另一个字段计算的字段?

是否可以使用猫鼬模式在模式级别定义基于另一个字段的字段?


例如,假设我有一个非常简单的架构:


const mongoose = require('mongoose')

const { Schema } = mongoose


const UserSchema = new Schema({

  username: {

    type: String,

    required: true,

    unique: true

  },

  username_lower: {

    type: String,

    // calculated: this.username.toLowerCase()

  },

  email: {

    type: String,

    required: true,

    unique: true

  },

  email_lower: { // for case-insensitive email indexing/lookup

    type: String,

    // calculated: this.email.toLowerCase()

  },

  password: {

    type: String,

    required: true

  },

  password_acceptable: {

    type: Array,

    // calculated: [

    //    this.password.toLowerCase(),

    //    this.password.toUpperCase()

    //    this.password.removeWhiteSpace(), // just an example

    //  ]

  }

})


const User = mongoose.model('User', UserSchema)


module.exports = User

是否有类似于虚拟“计算”字段(我已注释掉)的东西,它允许在保存新文档时自动创建字段?这将非常方便,并且可以减少必须在我的后端路由上手动定义这些字段的混乱。


MMTTMM
浏览 148回答 1
1回答

哈士奇WWW

您可以通过 Pre 中间件功能来完成,了解更多详情UserSchema.pre('save', function(){   this.username_lower = this.username.toLowerCase();   this.email_lower = this.email.toLowerCase();   // and so on ...   next();}); 
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答