[英]Delete related records using pre middleware in mongoose
I have 3 schemas including:我有 3 个模式,包括:
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?那么我如何使用
pre
中间件来做到这一点?
My mongoose version: ^6.0.12
我的 mongoose 版本:
^6.0.12
Thank you!谢谢!
BuildingSchema.pre("remove", function (next) {
Room.deleteMany({ building: this._conditions._id }).exec();
next();
});
remember remove the building using building.remove() mongoose base function:)记得使用 building.remove() mongoose base function 移除建筑物:)
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
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.