Я использую Typescript + Mon goose + GraphQL, который имеет следующий дизайн
Я пытаюсь написать промежуточное ПО mon goose, которое поможет мне удалить комментарии, относящиеся к конкретной задаче, если я удалю указанную c задачу
В настоящее время я могу удалить заданную задачу c, вызвав findByIdAndRemove, однако мое промежуточное ПО mon goose не работает, поскольку не «каскадно» удаляет комментарии, относящиеся к указанной задаче c. Я удалил
Может кто-нибудь помочь указать, где я ошибся? Спасибо
Ниже представлены мои модели
Задача
import { Document, Schema, model, Types } from "mongoose";
const taskSchema = new Schema(
{
name: {
type: String,
required: true,
},
completed: {
type: Boolean,
default: false,
required: true,
},
comments: [
{
type: Schema.Types.ObjectId,
ref: "Comment",
},
],
user: {
type: Schema.Types.ObjectId,
ref: "User",
},
},
{
timestamps: true,
}
);
interface ITaskSchema extends Document {
name: string;
completed: boolean;
comments: Types.Array<Object>;
user: Types.ObjectId;
}
taskSchema.pre<ITaskSchema>("remove", function (next) {
const Comment = model("Comment");
Comment.remove({ _id: { $in: this.comments } }).then(() => next());
});
const Task = model<ITaskSchema>("Task", taskSchema);
export default Task;
Комментарий
import * as mongoose from "mongoose";
const Schema = mongoose.Schema;
const commentSchema = new Schema(
{
review: {
type: String,
required: true,
},
task: {
type: Schema.Types.ObjectId,
ref: "Task",
},
user: {
type: Schema.Types.ObjectId,
ref: "User",
},
},
{
timestamps: true,
}
);
const Comment = mongoose.model("Comment", commentSchema);
export default Comment;
Пользователь
import * as mongoose from "mongoose";
import hobbySchema from "./Hobby";
const Schema = mongoose.Schema;
const userSchema = new Schema(
{
name: {
type: String,
},
email: {
type: String,
required: true,
},
password: {
type: String,
},
hobbies: [hobbySchema],
tasks: [
{
type: Schema.Types.ObjectId,
ref: "Task",
},
],
},
{
timestamps: true,
}
);
const User = mongoose.model("User", userSchema);
export default User;