You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:20:48