Я строю приложение для недвижимости и я в 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, поэтому схемы не разделяются, а используют разные коллекции.