У меня есть несколько мест в моем приложении, где нам нужно использовать «базовую схему», а затем пару дискриминаторов, чтобы различать guish между версиями этого документа stati c и пользовательскими c версии, скопированные с версии c.
В одной из этих моделей я настроил виртуальный атрибут следующим образом:
const BaseSchema = new Schema({
name: {
type: String,
required: true,
},
etc: String,
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
});
const StaticSchema = new Schema({stuff}); // these schemas extend the Base schema but the fields aren't relevant here
const UserSchema = new Schema({stuff});
// Virtual set on the base schema
BaseSchema.virtual('attribute').get(function get() {
// do some stuff
return value;
});
const Base = mongoose.model('Base', BaseSchema);
exports.Static = Base.discriminator('Static', StaticSchema);
exports.User = Base.discriminator('User', UserSchema);
В другой модели мне не хотелось бы иметь виртуальный набор в базовой схеме, так как данное поле необходимо использовать только для документов stati c, а не для пользовательских. Я попробовал это:
const BaseSchema2 = new Schema({
name: {
type: String,
required: true,
},
etc: String,
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
});
const StaticSchema2 = new Schema({stuff});
const UserSchema2 = new Schema({stuff});
// Virtual set on the static schema
StaticSchema2.virtual('attribute').get(function get() {
// do some stuff
return value;
});
const Base2 = mongoose.model('Base2', BaseSchema2);
exports.Static2 = Base2.discriminator('Static2', StaticSchema2);
exports.User2 = Base2.discriminator('User2', UserSchema2);
Во втором случае я не получаю этот виртуальный атрибут обратно, когда я запрашиваю конечную точку, которая возвращает документы StaticSchema2, в то время как виртуальный, кажется, работает нормально в первом случае. Есть ли какая-то концептуальная причина, по которой второй пример не должен работать, или проблема, вероятно, где-то еще в моем коде?