node.js - 删除父级时如何删除具有相同父级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;
我也试过这里给出的答案
但不工作。
我该怎么做呢?
解决方案
下面的代码对我有用。如果要删除具有相同父 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");
}
});
});
推荐阅读
- c++ - Kotlin 中的 C++ 命名空间等价物
- javascript - 如何从 JavaScript 中的服务器响应下载 XLSX 文件?
- php - 仅针对某些用户的未识别索引错误
- database - 如何在线在 Office 365 中创建数据库
- java - 使用 Java 从 Json Payload 中获取字段 ID 值
- django - 如何在不使用 Django auth 和表单的情况下在 Django 中实现密码重置
- java - 调色板 getDominantColor 方法,在白色图像中无法正常工作
- c# - Bot Framework Composer - 读取应用程序设置
- spring-boot - Spring为所有方法创建方面,其中包含元注释中的注释
- c++ - SFGUI 运行很多 GL 错误