如何使用Joi、Mongoose和Hapi验证鉴别器数组?
Mongoose 鉴别器数组实现与数据结构解析
这是一段典型的Mongoose鉴别器数组用法,我帮你拆解代码逻辑和最终生成的数据结构:
模型定义与鉴别器配置
首先是模型的初始化和鉴别器设置代码:
const model = new mongoose.Schema({ foo: { type: String, required: true }, discriminatorArray: [new mongoose.Schema({ bar: { type: String, required: false } }, { discriminatorKey: 'baz', _id: false })] }); // 获取数组字段的路径对象,添加不同类型的鉴别器 const docArray = model.path('discriminatorArray'); docArray.discriminator('discriminatorValue1', anotherModel1); docArray.discriminator('discriminatorValue2', anotherModel2); // 注册最终的模型 mongoose.model('Model', model);
最终生成的数据结构
当你创建并保存这个模型的文档时,数据会呈现如下结构(以JSON格式为例):
{ "foo": "someValue", "discriminatorArray": [ { "baz": "discriminatorValue1", // 这里会包含anotherModel1定义的所有字段,以及基础的bar字段 "someFieldFromModel1": "example1" }, { "baz": "discriminatorValue2", // 这里会包含anotherModel2定义的所有字段,以及基础的bar字段 "someFieldFromModel2": "example2" } ] }
关键细节说明
- 鉴别器键(discriminatorKey):设置为
'baz'后,Mongoose会自动在数组的每个子文档中添加这个字段,用来标识该子文档属于哪个鉴别器类型(值就是你调用discriminator()时传入的第一个参数)。 - 禁用子文档_id:通过
_id: false关闭了子文档的自动_id生成,避免数组元素中出现多余的_id字段,让结构更简洁。 - 字段继承:每个鉴别器子文档都会继承基础子Schema中的字段(比如示例中的
bar),同时拥有自身模型定义的额外字段。
内容的提问来源于stack exchange,提问作者null
相关产品推荐
相关产品推荐

