【问题标题】:mongoose schema multi ref for one property一个属性的猫鼬模式多参考
【发布时间】:2015-02-23 00:29:43
【问题描述】:

如何为一个猫鼬模式的一个属性编写多引用,像这样(但错误):

var Schema = mongoose.Schema;
var PeopleSchema = new Schema({
    peopleType:{
        type: Schema.Types.ObjectId,
        ref: ['A', 'B'] /*or 'A, B'*/
    }
})

【问题讨论】:

  • 这真的没有意义,因为 Mongoose 如何知道给定文档要引用哪个模型?你能提供更多关于你想要做什么的细节吗?
  • Thanks.OK,例如,我有两种商品,AGoods 模型和 BGoods 模型。而且我还有一个 Goods 模型来保存所有它们(只保存参考)。所以当我找到好的,我会在 Goods 模型中搜索,如果找到,它将从 AGoods 或 BGoods 填充真正的好信息。
  • 你找到方法了吗?

标签: mongodb mongoose schema ref


【解决方案1】:

您应该在模型中添加字符串字段并在其中存储外部模型名称,以及 refPath 属性 - Mongoose Dynamic References

var Schema = mongoose.Schema;
var PeopleSchema = new Schema({
    externalModelType:{
        type: String
    },
    peopleType:{
        type: Schema.Types.ObjectId,
        refPath: 'externalModelType'
    }
})

现在 Mongoose 将使用来自相应模型的对象填充 peopleType。

【讨论】:

  • 所以他应该添加两个字符串字段来引用两个模型A和B?
【解决方案2】:

在当前版本的 Mongoose 中,我仍然看不到使用您想要的语法的多重引用。但是您可以使用here 中描述的“跨数据库填充”方法的一部分。我们只需要将人口逻辑移动到人口方法的显式变体中:

var PeopleSchema = new Schema({
    peopleType:{
        //Just ObjectId here, without ref
        type: mongoose.Schema.Types.ObjectId, required: true,
    },
    modelNameOfThePeopleType:{
        type: mongoose.Schema.Types.String, required: true
    }
})

//And after that
var People = mongoose.model('People', PeopleSchema);
People.findById(_id)
    .then(function(person) {
        return person.populate({ path: 'peopleType',
            model: person.modelNameOfThePeopleType });
    })
    .then(populatedPerson) {
        //Here peopleType populated
    }
...

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2015-03-16
    • 2011-11-14
    • 2017-09-13
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多