猫鼬使用父字段生成子字段

时间:2019-07-11 04:18:22

标签: node.js mongodb mongoose

我正在尝试使用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可以提供类似的功能,但是我还没有找到有关查询模型以添加到虚拟字段的任何文档。预先感谢!

1 个答案:

答案 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的信息。