在猫鼬中反转模型关系?

时间:2017-03-01 21:42:51

标签: node.js mongodb mongoose mongoose-schema

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

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}
});

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

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。 一个是在项目组合中添加一个projectIds数组,然后你可以填充,但如果你不小心清理/管理更新的引用,可能会变得混乱。

这可以通过将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>}}

这两个选项都有利有弊,但目前这些是我能想到的唯一两个选项。