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
数组,其中包含每个有两个项目的对象,_field
和 value
。 _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 中模型子模式中的参考项的主要内容,如果未能解决你的问题,请参考以下文章