Mongoose ODM模型子模式中的参考项

时间:2016-01-27 19:55:26

标签: node.js mongodb mongoose mongoose-populate mongoose-schema

我设置我的MongoDB模型,并且我有一个模型架构(Partition模型)设置,其中一个架构项(fields)是一个跟随另一个的项目数组架构(Field架构)

这是分区模型(使用分区模式和字段模式):

// Partition model
module.exports = Mongoose => {     
    const Schema = Mongoose.Schema

    // Field Schema
    const fieldSchema = new Schema({
        name: {
            type: Schema.Types.String
        }
    })

    // Partition Schema
    const partitionSchema = new Schema({
        name: {
            type: Schema.Types.String
        },
        // `fields` is an array of objects that must follow the `fieldSchema`
        fields: [ fieldSchema ]
    })

    return Mongoose.model( 'Partition', partitionSchema )
}

然后我有另一个模型(Asset模型),它有一个attributes数组,它包含每个包含两个项_fieldvalue的对象。 _field必须是一个ID,它将引用分区模型fields._id值中的项目。

继承资产模型:

// Asset model
module.exports = Mongoose => {     
    const Schema = Mongoose.Schema

    const assetSchema = new Schema({
        attributes: [{
           // The attributes._field should reference one of the Partition field values
            _field: {
                type: Schema.Types.ObjectId,
                ref: 'Partition.fields' // <-- THIS LINE
            },
            value: {
                type: Schema.Types.Mixed,
                required: true
            }
        }],
        // Reference the partition ID this asset belongs to
        _partition: {
            type: Schema.Types.ObjectId,
            ref: 'Partition'
        }
    })

    return Mongoose.model( 'Asset', assetSchema )
}

我遇到问题的地方是_field架构中的Asset项目。我不确定我应该设置什么ref值,因为它引用了一个子模式(意味着Field模式中的Partition模式)

我可能在文档中忽略了它,但我没有看到任何东西。如何引用模型子模式,因此当我populate查询中的该项时,它会使用Partition模型文档中的子文档填充它?

我试图将字段文档引用为Partition.fields,这导致了错误:

  

MissingSchemaError:尚未为模型“Partition.fields”注册架构。

我根据我从另一个SO线程中读取的内容尝试了上述ref值,但它似乎不起作用。

1 个答案:

答案 0 :(得分:0)

显然,这是不可能的..所以不适合创建另一个模型