一个属性的mongoose schema multi ref

幻影枫*_*影枫韵 11 schema ref mongoose mongodb

如何为一个mongoose模式的一个属性编写多个ref,就像这样(但是错误的):

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

小智 15

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

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

现在,Mongoose将使用相应模型中的对象填充peopleType.


小智 5

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

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
    }
...
Run Code Online (Sandbox Code Playgroud)