我正在使用猫鼬v5.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方法返回所有数据。
请告诉我这是否可行,或者是否有更好的方法来执行此类任务
谢谢 达米安
答案 0 :(得分:2)
如果我对您的理解正确,那么您想在AdminModel中继承UserModel,并使用其他方法继承decorate
,例如,可以使用util.inherits
(或所谓的Mongoose鉴别符),例如所以:
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中了解更多信息。
上也有一篇不错的文章