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

Typegoose+Mongoose如何向数组中推送元组?

问题解决:Mongoose CastError 转换字符串失败

问题根源

你错误地将events字段的mongoose类型指定为String,但实际要存储的是元组数组([string, Date][])。当你尝试推入元组时,mongoose会按照配置的String类型去转换整个元组,自然抛出类型转换错误。

解决方案

修正@prop的类型配置,明确告诉mongoose这是一个包含String和Date的元组数组:

修改后的完整代码

import { prop, modelOptions, DocumentType, getModelForClass } from "@typegoose/typegoose";
import dbConnect from "src/lib/dbConnect";
import mongoose from 'mongoose';

@modelOptions({ schemaOptions: { timestamps: true } })
class Kitten {
  @prop()
  public name?: string;

  // 修正类型配置:指定为[String, Date]的数组
  @prop({ type: [String, Date], required: true, default: [] })
  public events!: [string, Date][]; // 也可保留 mongoose.Types.Array<[string, Date]>

  // 实例方法:
  public async addEvent(this: DocumentType<Kitten>, _eventName: string) {
    const tuple: [string, Date] = [_eventName, new Date()];
    this.events.push(tuple);
    await dbConnect();
    await this.save();
  }
}

export const KittenModel = getModelForClass(Kitten);

关键说明

  • type: [String, Date]:明确告知mongoose,数组的每个元素是由字符串和日期组成的固定长度元组
  • TypeScript类型可以使用[string, Date][]或mongoose.Types.Array<[string, Date]>,两者都能完成正确的类型推导
  • 原代码中type: String会强制mongoose将所有元素转为字符串,而你推入的元组是数组类型,因此触发转换失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:05:14