【问题标题】:mongoose generating a children field using parent field猫鼬使用父字段生成子字段
【发布时间】:2019-11-20 17:20:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以在 Person 架构模型中创建一个 post save 挂钩,然后 find 具有父 id 的人员和该人员的 create/update 子数组。

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

    试试这个:

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

    阅读更多关于mongoose hooks的详细信息。

    【讨论】:

    • 感谢您的回复!我认为您的解决方案是正确的,但我得到了一个`MongoError:未知修饰符:$addtoSet`。您对如何解决这个问题有任何想法吗?
    • 我已经更新了答案,它应该是带有大写“T”的 addToSet 并且它需要一个对象(不是一个值),我也更新了它。使用最新代码
    • 谢谢!因为我使用 keystone js 和 children 字段是 keystone 关系类型所以我必须通过整个文档{$addToSet : { children : doc}} 但我仍然工作:)
    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-10-05
    • 2012-09-24
    • 1970-01-01
    • 2016-10-13
    • 2018-08-26
    相关资源
    最近更新 更多