Hiện nay tôi có hai schemas gần như giống hệt nhau:Mongoose: mở rộng schemas
var userSchema = mongoose.Schema({
email: {type: String, unique: true, required: true, validate: emailValidator},
passwordHash: {type: String, required: true},
firstname: {type: String, validate: firstnameValidator},
lastname: {type: String, validate: lastnameValidator},
phone: {type: String, validate: phoneValidator},
});
Và
var adminSchema = mongoose.Schema({
email: {type: String, unique: true, required: true, validate: emailValidator},
passwordHash: {type: String, required: true},
firstname: {type: String, validate: firstnameValidator, required: true},
lastname: {type: String, validate: lastnameValidator, required: true},
phone: {type: String, validate: phoneValidator, required: true},
});
khác biệt duy nhất của họ là trong xác nhận: Người dùng không cần một firstname, lastname hoặc điện thoại. Tuy nhiên, quản trị viên phải có các thuộc tính này được xác định.
Thật không may mã trên không phải là rất khô, vì chúng gần như giống hệt nhau. Do đó, tôi tự hỏi liệu có thể xây dựng một số adminSchema
dựa trên số userSchema
hay không. Ví dụ:
var adminSchema = mongoose.Schema(userSchema);
adminSchema.change('firstname', {required: true});
adminSchema.change('lastname', {required: true});
adminSchema.change('phone', {required: true});
Rõ ràng đó chỉ là mã giả. Có phải bất cư thứ gì như thế này đều được?
Một câu hỏi tương tự khác là nếu có thể tạo giản đồ mới dựa trên một lược đồ khác và thêm một số thuộc tính khác vào nó. Ví dụ:
var adminSchema = mongoose.Schema(userSchema);
adminSchema.add(adminPower: Number);
Và mọi người alredy làm điều đó https://github.com/briankircho/mongoose-schema-extend thấy điều này. – diproart