我正在尝试使用mongodb创建家谱网站。创建新的家庭成员后,我只想引用此人的父母(父亲),并让猫鼬在该人模型中自动生成一个child字段。这是Person模式:
Person.add({
fullName: { type: String, initial:true, required: true,label: , index:true, },
parent: {type: Types.Relationship, ref:'Person'},
});
如您所见,创建一个新的人时,我希望猫鼬自动在Person模型中查找所有其父ID与我要创建的人匹配的人,并在children字段中生成一个ID数组。 / p>
我进行了一些研究,发现Mongoose Virtuals可以提供类似的功能,但是我还没有找到有关查询模型以添加到虚拟字段的任何文档。预先感谢!
答案 0 :(得分:1)
您可以在post save
模式模型中创建一个Person
钩子,然后find
个具有其父ID和该人的create/update
个孩子数组的人。
使用$addToSet
而不是$push
,以便同一子对象不会被多次推送。
尝试一下:
PersonSchema.post('save', function(doc, next) {
this.findOneAndUpdate({_id : doc.parent},{$addToSet : { children : doc._id}})
next();
});
详细了解有关mongoose hooks的信息。