在Mongoose

时间:2016-10-31 14:08:53

标签: javascript node.js mongodb mongoose

我刚刚学习了Mongoose,并且我已将ParentChild文档建模如下..

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'关系的所有例子都有一个'儿童'数组但是没有显示它是如何使用的。有人可以提供一个例子或给出一个目的吗?

1 个答案:

答案 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) => { .... } )

然后您的父母将与他们的孩子一起居住。!