Пн goose несколько дискриминаторов странное поведение - PullRequest
0 голосов
/ 07 февраля 2020

Я строю приложение для недвижимости и я в 2 коллекциях. Один для продажи недвижимости и второй для аренды недвижимости. Я использовал дискриминаторы для создания схем для дома, квартиры, земли и т. Д. c .. Итак, я создал 2 схемы для базы.


const baseOptions = {
  discriminatorKey: 'propertyType',
  collection: 'property_rent'
}

const propertyRentSchema = new Schema({
  title: {
    type: String,
    required: [true, 'Title is required'],
    trim: true
  },
  sold: {
    type: Boolean,
    default: false
  },
  **additionalFieldForRent: {
    type: String,
    required: true
}**
}, baseOptions)

const PropertyRent = mongoose.model('Property_Rent', propertyRentSchema);

module.exports = PropertyRent; 

Это первая базовая схема, вот еще одна, скажем, что они Симиллар, но единственное отличие - это одно обязательное поле

const baseOptions = {
  discriminatorKey: 'propertyType',
  collection: 'property_sell'
}

const propertySellSchema = new Schema({
  title: {
    type: String,
    required: [true, 'Title is required'],
    trim: true
  },
  sold: {
    type: Boolean,
    default: false
  }
}, baseOptions)

const PropertySell = mongoose.model('Property_Sell', propertySellSchema);

module.exports = PropertySell; 

Они работают, я создал свои разделенные коллекции property_sell, property_rent, все работает отлично.

И, наконец, вот пример hotelSchema

const houseSchema = new Schema({
  houseType: {
    type: String,
    enum: ['apartment', 'studio', 'duplex', 'flat'],
    required: [true, 'You must set property type']
  },
  rooms: {
    type: Number,
    min: 1
  }
}, {
  toJSON: { virtuals: true },
  toObject: { virtuals: true }
})

**const HouseRent = propertyRent.discriminator('House_Rent', houseSchema);
const HouseSell = propertySell.discriminator('House', houseSchema);**

module.exports = {
  HouseRent,
  HouseSell
}

Здесь, когда я добавляю схему дома к различным базовым моделям House_Rent и House_Sell, propertyType (criminatorKey) будет иметь значение House_Sell для обеих коллекций, потому что

**const HouseSell = propertySell.discriminator('House_Sell', houseSchema);**

находится внизу. .. Реальная проблема заключается в том, что когда поле требуется для PropertyRentSchema, оно также необходимо для PropertySellSchema, поэтому схемы не разделяются, а используют разные коллекции.

...