代码之家  ›  专栏  ›  技术社区  ›  Damien

Mongoose-1模式的多个模型

  •  0
  • Damien  · 技术社区  · 6 年前

    我使用的是MongooseV5.2.17。 我想知道是否有可能有多个模型映射到1模式。 例如,我有以下模型

    const mongoose = require('mongoose');
    const validator = require('validator');
    const jwt = require('jsonwebtoken');
    const _ = require('lodash');
    const bcrypt = require('bcryptjs');
    
    const UserSchema = new mongoose.Schema({
      email: {
        type: String,
        required: true,
        trim: true,
        minlength: 1,
        unique: true,
        validate: {
          validator: validator.isEmail,
          message: '{VALUE} is not a valid email',
        },
      },
      password: {
        type: String,
        required: true,
        minlength: 6,
      },  
      isTrialUser: {
        type: Boolean,
        default: true,
      },
      isAdminUser: {
        type: Boolean,
        default: false,
      }
    });
    
    UserSchema.methods.toJSON = function () {
      const user = this;
      const userObject = user.toObject();
    
      return _.pick(userObject, ['_id', 'email', 'isTrialUser']);
    };
    
    
    UserSchema.pre('save', function (next) {
      const user = this;
    
      if (user.isModified('password')) {
        bcrypt.genSalt(10, (err, salt) => {
          bcrypt.hash(user.password, salt, (hashErr, hash) => {
            user.password = hash;
            next();
          });
        });
      } else {
        next();
      }
    });
    
    const User = mongoose.model('User', UserSchema);
    
    module.exports = { User, UserSchema };
    

    我是否可以创建另一个AdminModel,在其中特定于管理员的方法可以生存? 我还想从AdminModel返回toJSON方法的所有数据。

    请让我知道,如果这是可能的,或者如果有更好的方式来执行这样的任务

    谢谢 达米安

    1 回复  |  直到 6 年前
        1
  •  2
  •   Akrion    6 年前

    如果我对您的理解正确,那么您希望在AdminModel中继承UserModel,并 decorate 有额外方法的那个,你可以用 util.inherits (或所谓的猫鼬鉴别器)是这样的:

    function BaseSchema() {
      Schema.apply(this, arguments);
    
      this.add({
        name: String,
        createdAt: Date
      });
    }
    util.inherits(BaseSchema, Schema);
    
    var UserSchema = new BaseSchema();
    var AdminSchema = new BaseSchema({ department: String });
    

    你可以阅读更多关于它的文章 Mongoose docs .

    mongoose discriminators here