首页 > 解决方案 > 删除父级时如何删除具有相同父级ID的子模式中的所有字段

问题描述

我正在nodejs中开发预约应用程序

我有 2 个模式,一个是存储插槽 (startTime-endTime) 的插槽模式和一个存储 (StartTime-endTime) 块的子插槽模式

例如 - (10 - 12) 是插槽范围,然后子插槽包含子插槽 - (10:00,10:30,11:00,11:30,12;00)

我想写一个登录名,如果我们删除插槽,它的所有子插槽都会自动删除

这是我迄今为止尝试过的,但它根本不起作用。.remove 函数抛出错误

router.get("/deleteSlot/:id", (req, res) => {
  slot.findByIdAndRemove(req.params.id, (err, doc) => {
    if (!err) {
      subSlotBooking.find({ slots: req.params.id }, (err, docs) => {
        if (!err) {
          docs.remove((err) => {
            if (!err) {
              console.log("docs eleted successfully");
            }
          });
        }
      });
      res.redirect("/displaySlot");
    } else {
      req.flash("error_msg", "Failed to delete");
    }
  });
});

这是我的子槽模式

const mongoose = require("mongoose");

const slotBookingSchema = new mongoose.Schema({
  startTime: [{ type: String }],
  endtime: { type: String },
  isBooked: { type: Boolean, default: false },
  isDisabled: { type: Boolean, default: false },
  createdBy: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
  slots: { type: mongoose.Schema.Types.ObjectId, ref: "slot" },
});

const subSlotBooking = mongoose.model("subSlotBooking", slotBookingSchema);
module.exports = subSlotBooking;


主槽模式

const mongoose = require("mongoose");
const { mongo } = require("mongoose");
const subSlotBooking = require("../models/slotBooking.model");

const slotSchema = new mongoose.Schema(
  {
    createdBy: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
    docdetail: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Doctor",
    },
   startTime: {
      type: String,
    },
    endtime: {
      type: String,
    },
    interval: {
      type: String,
    },
 
  },
  { timestamps: {} }
);
slotSchema.pre("remove", function (next) {
  // 'this' is the client being removed. Provide callbacks here if you want
  // to be notified of the calls' result.
  subSlotBooking.remove({ slots: this._id }).exec();
  next();
});
const slot = mongoose.model("slot", slotSchema);

module.exports = slot;

我也试过这里给出的答案

但不工作。

我该怎么做呢?

标签: node.jsmongodbmongoose

解决方案


下面的代码对我有用。如果要删除具有相同父 ID 的多个子记录,请使用 model.deleteMany() 而不是 model.remove()

router.get("/deleteSlot/:id", (req, res) => {
  slot.findByIdAndRemove(req.params.id, (err, doc) => {
    if (!err) {
      subSlotBooking.deleteMany({ slots: req.params.id }, (err, docs) => {
        if (!err) {
          console.log("docs eleted successfully");
        }
      });

      res.redirect("/displaySlot");
    } else {
      req.flash("error_msg", "Failed to delete");
    }
  });
});


推荐阅读