(MONGODB)删除父集合时如何移除引用数据



我有两个模式文件夹和一个模型文件,如下所示。

FolderSchema

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)

modelFileSchema

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的文件夹,文件1、2、3引用文件夹a。当我删除文件夹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")
})
}

您可以使用中间件。

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

更多信息请参考这篇文章:自动删除引用对象在MongoDB

相关内容

  • 没有找到相关文章

最新更新