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
相关产品推荐
相关产品推荐

