簡體   English   中英

mongoose中使用pre中間件刪除相關記錄

[英]Delete related records using pre middleware in mongoose

我有 3 個模式,包括:

建造

const BuildingSchema = mongoose.Schema({
  address: { type: String, required: true },
  numberOfRooms: { type: Number, default: 0 },
});

房間

const RoomSchema = mongoose.Schema({
  roomNumber: { type: Number, required: true, unique: false },
  building: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Building",
    required: true,
    unique: false,
  },
});

協議

const AgreementSchema = mongoose.Schema({
  agreementNumber: { type: Number, unique: true },
  room: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Room",
    required: true,
    unique: false,
  },
});

我的情況是在刪除建築物之后

  • 所有與建築相關的房間
  • 所有與房間相關的協議

也將被刪除,目前我知道如何刪除與建築物相關的房間:

BuildingSchema.pre("deleteOne", function (next) {
  Room.deleteMany({ building: this._conditions._id }).exec();
  next();
});

那么我如何使用pre中間件來做到這一點?

我的 mongoose 版本: ^6.0.12

謝謝!

BuildingSchema.pre("remove", function (next) {
  Room.deleteMany({ building: this._conditions._id }).exec();
  next();
});

記得使用 building.remove() mongoose base function 移除建築物:)

這是我的解決方案。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM