假设我有一个这样的模式:

var Person = new Schema({
    name: String
});

var Assignment = new Schema({
    name: String,
    person: ObjectID
});

如果我删除了一个人,仍然可能会留下一些孤立的任务,这些任务引用了一个不存在的人,这会在数据库中造成额外的混乱.

有没有一种简单的方法可以确保当一个人被删除时,对该人的所有相应引用也会被删除?

推荐答案

您可以在Person模式中添加自己的'remove' Mongoose middleware,以便从引用它的所有其他文档中删除此人.在中间件函数中,this是要删除的Person文档.

Person.pre('remove', function(next) {
    // Remove all the assignment docs that reference the removed person.
    this.model('Assignment').remove({ person: this._id }, next);
});

Mongodb相关问答推荐

用嵌套对象替换对象数组中的子字符串

MongoDB Aggregate:查找每个月的交叉日期范围的数量

无法在Ubuntu 22.04上安装MongoDB 7.0

在Mongoose中对嵌套文档设置时间戳,但不对父文档设置时间戳

MongoDB对两个串联数组进行排序

数组过滤器 MongoDB

Mongoose - $project 嵌套的对象数组到数组的根级别

使用 $addFields 将字段添加到 $lookup 结果中的每个项目

映射数组导致 mongodb 聚合

以聚合顺序使用 $$ROOT

Meteor 方法与deny/allow 规则

如何使用 C# MongoDB 驱动程序检索字段子集?

如何更新 mongodb 文档以向数组添加新元素?

将数据插入 MongoDB - 没有错误,没有插入

Express 无法 PUT/DELETE 方法.出了什么问题?

spring-data-mongo - 可选查询参数?

如何使用 angular.js 推送通知?

MEAN 堆栈文件上传

MongoDB 的 MMAPV1、WiredTiger 或 In-Memory StorageEngine 如何 Select ?

对象不是 JSON 可序列化的