举个例子,您的项目有两个角色,一是业务用户,二是普通用户。某些商业用户应该有一些额外的字段,例如开放时间、费用、占用率等,而您不会喜欢普通用户文档中的那些字段。那么您可以创建一个单独的模型“业务”来扩展您的
用户”模型由分隔键“userType”组成,所有业务逻辑都在其上触发。
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var userSchema = new Schema({
name: {
type: String,
required: true,
message: 'Name is required',
},
},{
timestamps: {
createdAt: 'created',
updatedAt: 'updated'
},
discriminatorKey: 'userType',
id: false,
toJSON: {
getters: true,
virtuals: true
},
toObject: {
getters: true,
virtuals: true
}
});
var businessSchema= new Schema({
charges: {
type: Number,
default: 20
},
})
module.exports = mongoose.model('User', userSchema)
module.exports = User.discriminator('Business',businessSchema );
// in business logic/ controller try and debug results
var mongoose = require('mongoose');
const User = mongoose.model("User");
const Business = mongoose.model("Business");
User.findOne({}, (err, user)=>{
console.log(err, user);
})
Business.findOne({}, (err, biz)=>{
console.log(err, biz);
})
注意 biz 具有用户的所有属性 + 一些额外的字段。实现逻辑也很容易理解。