(MONGODB) 删除父集合时如何删除引用的数据
Posted
技术标签:
【中文标题】(MONGODB) 删除父集合时如何删除引用的数据【英文标题】:(MONGODB) How to remove referenced data when parent collection is deleted 【发布时间】:2021-10-20 04:11:39 【问题描述】:我有两个模式文件夹和模型文件如下..
文件夹架构
const mongoose = require('mongoose')
const ObjectId = mongoose.Schema
const folderSchema = new mongoose.Schema(
title:
type: String,
,
belongsTo:
type:ObjectId,
ref:"Project"
)
module.exports = mongoose.model("Folder",folderSchema)
模型文件架构
const mongoose = require("mongoose");
const ObjectId = mongoose.Schema
const modelFileSchema = new mongoose.Schema(
createdAt:
type: Date,
default: Date.now,
,
name:
type: String,
required: [true, "Uploaded file must have a name"],
,
image:
type:String
,
belongsTo:
type:ObjectId,
ref:"Folder"
);
const File = mongoose.model("ModelFile", modelFileSchema);
module.exports = File;
文件夹架构是文件的父架构。删除文件夹时如何从文件架构中删除数据。文件架构中属于正在删除的文件夹的所有数据也必须删除。例如,我有名为 A 的文件夹和引用文件夹 A 的文件 1、2、3。当我删除文件夹 A 时,文件 1、2、3 也必须删除。
下面是我的删除文件夹代码,只是删除文件夹。文件保留在数据库中。
路线。
router.delete("/folder/delete/:folderId",deleteFolder);
控制器..
exports.deleteFolder = (req,res)=>
let folderId= req.params.folderId
console.log(folderId);
Folder.findOne(_id:folderId).then((resp)=>
console.log(resp._id)
Folder.deleteOne(_id:folderId)
.then(()=>
res.status(400).json( resp._id + " deleted")
)
.catch((err)=>
console.log(err.message)
)
).catch(()=>
res.send("Folder doesnot exist")
)
【问题讨论】:
【参考方案1】:您可以为此使用中间件。
Folder.pre('deleteOne', function(next)
// Remove all the assignment docs that reference the removed person.
this.model('ModelFile').remove( _id: this._id , next);
);
更多信息请参考这篇文章:Automatically remove referencing objects on deletion in MongoDB
【讨论】:
以上是关于(MONGODB) 删除父集合时如何删除引用的数据的主要内容,如果未能解决你的问题,请参考以下文章