I have 3 schemas including:
Building
const BuildingSchema = mongoose.Schema({
address: { type: String, required: true },
numberOfRooms: { type: Number, default: 0 },
});
Room
const RoomSchema = mongoose.Schema({
roomNumber: { type: Number, required: true, unique: false },
building: {
type: mongoose.Schema.Types.ObjectId,
ref: "Building",
required: true,
unique: false,
},
});
Agreement
const AgreementSchema = mongoose.Schema({
agreementNumber: { type: Number, unique: true },
room: {
type: mongoose.Schema.Types.ObjectId,
ref: "Room",
required: true,
unique: false,
},
});
My scenario is after deleting a building then
will be deleted too, currently I know how to delete rooms related to building:
BuildingSchema.pre("deleteOne", function (next) {
Room.deleteMany({ building: this._conditions._id }).exec();
next();
});
So how I can do it using pre
middleware ?
My mongoose version: ^6.0.12
Thank you!
This is my solution.
BuildingSchema.pre("deleteOne", async function (next) {
const buildingId = this._conditions._id;
await Room.find({ building: buildingId }, (err, rooms) => {
rooms.map(async (item) => {
await Agreement.deleteMany({ room: item._id }); // => Delete all Agreements related to Room
});
}).clone();
await Room.deleteMany({ building: buildingId }); // => Delete all Rooms related to Building
});