Estoy usando mangosta como ODM y tratando de modelar un animal/mascota. En el modelo tengo 2 campos, padre y refugio. Quiero asegurarme de que la mascota pertenezca a una persona o a un refugio, pero no a ambos. ¿Qué limitaciones me permitirían hacer esto?
Mi modelo en JS: -
const petSchema = mongoose.Schema({ name: { type: String, required: [true, "Pet must have a name."], trim: true }, species: { type: String, required: [true, "Pet must have a species."] }, parent: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, shelter: { type: mongoose.Schema.Types.ObjectId, ref: 'Shelter' } }Soy nuevo en las bases de datos y sus jergas, corrígeme si hay algún error en cuestión. Gracias.
Puede usar la función requerida para determinar esto de la siguiente manera:
const petSchema = mongoose.Schema({ name: { type: String, required: [true, "Pet must have a name."], trim: true }, species: { type: String, required: [true, "Pet must have a species."] }, parent: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: function() { return !this.shelter; } }, shelter: { type: mongoose.Schema.Types.ObjectId, ref: 'Shelter', required: function() { return !this.parent; } } }Terminé usando middleware de prevalidación en mongoose: -
petSchema.pre('validate', function (next) { if((this.parent && this.shelter) || (!this.parent && !this.shelter)) return next(new Error("At least and Only one field(parent, shelter) should be populated")) next() })