Могут ли виртуальные системы Mon goose быть установлены на схемах, используемых в дискриминаторе? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть несколько мест в моем приложении, где нам нужно использовать «базовую схему», а затем пару дискриминаторов, чтобы различать 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, в то время как виртуальный, кажется, работает нормально в первом случае. Есть ли какая-то концептуальная причина, по которой второй пример не должен работать, или проблема, вероятно, где-то еще в моем коде?

...