Javascript 如何处理具有循环依赖关系的父mongoose模式和子mongoose模式?

Javascript 如何处理具有循环依赖关系的父mongoose模式和子mongoose模式?,javascript,node.js,mongodb,mongoose,cyclic-reference,Javascript,Node.js,Mongodb,Mongoose,Cyclic Reference,我的父模型和子模型相互要求,所以我有 由于循环依赖性,const Parent=require(“./Parent”)没有将父项导入到子项js中。因此,当我调用child.remove()时,我得到TypeError:Parent.findById不是一个函数 它们相互引用的原因是,当移除子对象时,其引用id将从其父对象中移除。当父对象被删除时,我也需要从数据库中删除它的所有子对象。这些都是在模式中完成的 我怎样才能删除其父项和父项的子项中的子项引用,而不使该循环依赖项导致错误 Parent.j

我的父模型和子模型
相互要求
,所以我有

由于循环依赖性,
const Parent=require(“./Parent”)
没有将父项导入到子项js中。因此,当我调用
child.remove()
时,我得到
TypeError:Parent.findById不是一个函数

它们相互引用的原因是,当移除子对象时,其引用id将从其父对象中移除。当父对象被删除时,我也需要从数据库中删除它的所有子对象。这些都是在模式中完成的

我怎样才能删除其父项和父项的子项中的子项引用,而不使该循环依赖项导致错误

Parent.js

const mongoose=require('mongoose');
const Child=require(“./Child”);
const parentSchema=新的mongoose.Schema(
{
名称:String,
儿童类:[
{
类型:mongoose.Schema.Types.ObjectId,
参考:“儿童”,
},
],
},
{时间戳:{createdAt:'created_at'}
);
parentSchema.pre('remove',异步函数(下一步){
wait Child.deleteMany({u id:{$in:this.childrenIds}});
next();
});
const Parent=mongoose.model('Parent',parentSchema);
module.exports=父级;
Child.js:

const mongoose=require('mongoose');
const Child=require(“./Child”);
const parentSchema=新的mongoose.Schema(
{
名称:String,
儿童类:[
{
类型:mongoose.Schema.Types.ObjectId,
参考:“儿童”,
},
],
},
{时间戳:{createdAt:'created_at'}
);
parentSchema.pre('remove',异步函数(下一步){
wait Child.deleteMany({u id:{$in:this.childrenIds}});
next();
});
const Parent=mongoose.model('Parent',parentSchema);
module.exports=父级;
app.js:

const Parent=require(“./models/Parent”);
const Child=require(“./models/Child”);
const mongoose=require('mongoose');
猫鼬
.connect('mongodb://localhost/circularDep_db', {
useNewUrlParser:true,
useUnifiedTopology:正确,
UseFindModify:true,
})
。然后(()=>console.log('成功连接到MongoDB'))
.catch((err)=>console.error('Connection error',err));
const addChild=async(父、子)=>{
child.parentId=父项。\u id;
等待child.save();
parent.childrenIds.push(child);
等待parent.save();
};
异步函数run(){
const parent=wait parent.create({name:'Caryn'});
const child=wait child.create({name:'Dashie'});
const child2=wait Child.create({name:'Chappie'});
等待添加孩子(父母、孩子);
等待添加孩子(父母,孩子2);
wait child.remove();//引发类型错误
等待父项。删除();
}
run();
a)如果它们如此交织,则将它们放在同一个文件中b)不要使用
模块。导出
exports
,而是
exports.Parent=…
或c)在预挂接中是否需要(…)
惰性地执行
操作