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

Mongoose使用discriminator功能时报错No overload match this call问题求助

Mongoose discriminator 调用报错排查方案

问题根因

  • 基础Schema配置项位置传参错误

Schema 构造函数第一个参数为字段定义对象,第二个参数才是Schema配置项,你当前把baseOptions作为字段传入了第一个参数,配置完全没有生效。

  • discriminatorKey拼写错误

你配置里写的是discrimatorKey,少了中间的字母n,正确拼写为discriminatorKey,这个错误会导致鉴别器无法正常识别类型字段。

  • 子鉴别器模型重复注册

BaseCriteria.discriminator()调用后返回的本身就是可直接使用的Model实例,不需要再套一层model()方法注册,重复调用model()会触发参数不匹配的重载报错。

  • TS类型接口缺少继承

子Schema对应的接口IDateCriteria需要继承基础的IBaseCriteria,否则类型校验也会触发匹配错误。

修复后代码

基础父模型

import { model, Schema } from 'mongoose';

export interface IBaseCriteria {}

const baseOptions = {
  discriminatorKey: 'itemType', // 修正拼写错误
  collection: 'criterias',
};
// 第一个参数为空对象(无公共字段的情况),第二个参数传配置
const baseCriteriaSchema = new Schema<IBaseCriteria>({}, baseOptions);

export default model<IBaseCriteria>('BaseCriteria', baseCriteriaSchema);

子鉴别器模型

import { Schema } from "mongoose";
import BaseCriteria, { IBaseCriteria } from "./baseCriteria.model";

// 子接口继承基础接口
export interface IDateCriteria extends IBaseCriteria {
  after: Date;
  before: Date;
}

// discriminator返回的直接就是模型,直接导出即可
export default BaseCriteria.discriminator<IDateCriteria>(
  "date",
  new Schema({
    after: { type: Date },
    before: { type: Date },
  })
);

内容的提问来源于stack exchange,提问作者elaskar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 03:36:03