我刚刚学习了Mongoose,并且我已将Parent
和Child
文档建模如下..
var parent = new Schema({
children: [{ type: Schema.Types.ObjectId, ref: 'Child' }],
});
var Parent = db.model('Parent', parent);
var child = new Schema({
_owner: { type: Schema.Types.ObjectId, ref: 'Parent' },
});
var Child = db.model('Child', child);
当我删除Parent
时,我还想删除Child
字段中引用的所有children
个对象。 Stackoverflow上的Another question声明父类的pre
中间件函数可以像这样编写......
parent.pre('remove', function(next) {
Child.remove({_owner: this._id}).exec();
next();
});
应该确保删除所有子对象。但是,在这种情况下,是否有任何理由在children
模式中包含Parent
数组?没有它我还能执行创建/读取/更新/删除操作吗?例如,如果我想要我能做的所有孩子?
Child.find({_owner: user._id}).exec(function(err, results) { ... };
我见过的关于Mongoose'hasMany'关系的所有例子都有一个'儿童'数组但是没有显示它是如何使用的。有人可以提供一个例子或给出一个目的吗?
答案 0 :(得分:1)
您正在定义两个不同的集合,Child和Parent in - >
var Parent = db.model('Parent', parent);
var Child = db.model('Child', child);
因此,您可以通过添加/删除/更新随意使用子模型。通过将其保存为'ref',您可以执行以下操作:
Parent.find({_id:'idofparent'})
.populate('children')
.exec((err, result) => { .... } )
然后您的父母将与他们的孩子一起居住。!