【问题标题】:Reverse models relationship in mongoose?猫鼬中的反向模型关系?
【发布时间】:2017-03-02 16:39:58
【问题描述】:

我有两个架构(投资组合和与投资组合相关的项目):

portfolioSchema = new Schema({
    name: {type: String, required: true, unique: true},
    isActive: {type: Boolean, default: true}
});

projectSchema = new Schema({
    name: {type: String, required: true, unique: true},
    isActive: {type: Boolean, required: true, default: true},
    portfolio: {type: mongoose.Schema.Types.ObjectId, ref: 'portfolioSchema', required: true},
    isCodeBaseFullyOwned: {type: Boolean, required: true, default: false}
});

有没有办法选择所有投资组合并“填充”它们的相关项目?我可以按投资组合对项目进行分组,但如果投资组合中没有项目,我也必须想办法额外提取这些信息。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    有两种方法可以做到这一点。 一种是在投资组合上添加一组 projectId,然后您可以填充它们,但如果您不小心清理/管理更新的引用,可能会变得混乱。

    这可以通过将portfolioSchema更新为

    portfolioSchema = new Schema({
        name: {type: String, required: true, unique: true},
        isActive: {type: Boolean, default: true},
        projects: [{type: mongoose.Schema.Types.ObjectId, ref: 'projectSchema', required: true}]
    });
    

    另一个选项需要按照您所说的按投资组合对项目进行分组,然后收集所有返回的投资组合 ID,并运行第二个查询以获取投资组合

    {_id: {$nin: <array of already returned portfolio ids>}}
    

    这两种选择各有利弊,但目前我能想到的只有这两种选择。

    【讨论】:

    • 我可能会写一个小钩子来平滑这些反向查找例程,但我发现一个建议在 2014 年预订的 mongoose 中实现这一点,不知道他们为什么没有选择它 - 它可能是一个非常有用的功能。
    • 同意,在 mongoDB 中可以看到很多特性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2014-12-08
    • 2014-05-24
    • 2016-03-18
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多