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

Posted

技术标签:

【中文标题】Mongoose ODM 中模型子模式中的参考项【英文标题】:Reference item in sub-schema of model in Mongoose ODM 【发布时间】:2016-05-04 23:06:30 【问题描述】:

我正在设置我的 MongoDB 模型,并且我设置了一个模型架构 (Partition 模型),其中一个架构项 (fields) 是一组遵循另一个架构 (@987654325) 的项@schema)

这是分区模型(带有分区架构和字段架构):

// 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 )

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

我可能在文档中忽略了它,但我什么也没看到。我如何引用模型子架构,所以当我在查询中populate 那个项目时,它会用Partition 模型文档中的子文档填充它?

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

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

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

【问题讨论】:

你能让你的分区包含一个字段的引用数组吗?例如字段:[类型:mongoose.Schema.Types.ObjectId,参考:'field'] 我实际上是在考虑那个......但如果我能避免它,我宁愿避免它。如果没有人可以给我一个关于如何做到这一点的答案,那么我就不得不这样做。但我认为这是可能的,至少from reading this,我认为我只是做错了什么 【参考方案1】:

显然,这是不可能的。所以我只能求助于创建另一个模型

【讨论】:

以上是关于Mongoose ODM 中模型子模式中的参考项的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose ODM 模型创建问题

利用Mongoose来结构化模式与验证

MongoDB - 查询难题 - 文档参考或子文档

MongoDB - 查询难题 - 文档参考或子文档

Mongoose ODM,保存前更改变量

Mongoose ODM,保存前更改变量