node.js - Mongoose 使用父字段生成子字段

标签 node.js mongodb mongoose

我正在尝试使用 mongodb 创建一个家谱网站。创建新的家庭成员后,我只想引用该人的 parent (父亲),并让 mongoose 在人员模型中自动生成一个子字段。这是人员架构:

Person.add({
    fullName: { type: String, initial:true, required: true,label: , index:true,  },
    parent: {type: Types.Relationship, ref:'Person'},
});

正如你所看到的,在创建一个新人时,我希望 mongoose 自动查找 Person 模型中父 ID 与我正在创建的人匹配的所有人,并在 Children 字段中生成一个 id 数组。

我做了一些研究,发现 Mongoose Virtuals 可以提供类似的东西,但我没有找到任何有关查询模型以添加到虚拟字段的文档。提前致谢!

最佳答案

您可以在 Person 架构模型中创建一个 post save Hook ,然后查找具有父 ID 的人员并创建/更新 该人的子数组。

使用 $addToSet 而不是 $push,这样相同的子项就不会被推送多次。

试试这个:

PersonSchema.post('save', function(doc, next) {
    this.findOneAndUpdate({_id : doc.parent},{$addToSet : { children : doc._id}})
    next();
});

了解更多关于mongoose hooks的信息获取详细信息。

关于node.js - Mongoose 使用父字段生成子字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981567/

相关文章:

node.js - ElasticSearch 上的 mapper_parsing_exception 错误

javascript - 在 jade 页面上使用可变 JSON 对象时的 NodeJS "identifier starts immediately after numeric literal"

javascript - 自动递增序列 Mongoose

node.js - 如何重启iisnode?

node.js - 如何在没有访问 token 的情况下获取 Google 联系人?

javascript - Node.js 中的日期数组 - 我有错误 : RangeError: Maximum call stack size exceeded

node.js - 如何在nodejs中使用foreach进行Mongodb操作

mongodb - 下面的多对多关系应该如何在 MongoDB 中建模?

java - 如何在Spring Data中进行Mongo聚合查询?

javascript - Mongoose .populate() 未填充