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

如何在Mongoose Schema中正确声明对象数组类型字段

Mongoose 对象数组类型Schema字段正确声明方案

你需要同步修改TypeScript接口定义与Mongoose Schema配置两部分,才能实现favorite = [{name:"shoes", rating:0}]的存储结构:

1. 调整TypeScript接口类型

不要使用Array<any>的松散定义,先明确数组单个元素的结构,再给字段指定准确类型:

import { Document, Schema, model } from "mongoose";

// 定义单条收藏项的结构
interface IFavoriteItem {
  name: string;
  rating: number;
}

export interface IUserModel extends Document {
  favorite: IFavoriteItem[];
}

2. 修改Schema字段配置

你之前写的type: Array + items.type: String是JSON Schema的写法,不符合Mongoose的语法规则。Mongoose中定义对象数组,直接用方括号包裹子文档的字段结构即可:

const UserSchema = new Schema<IUserModel>({
  favorite: [
    {
      name: {
        type: String,
        required: true
      },
      rating: {
        type: Number,
        default: 0
      }
    }
  ]
});

export const UserModel = model<IUserModel>("UserModel", UserSchema, "Users");

可选配置说明

  • 如果不需要Mongoose给每个收藏子项自动生成_id字段,可以把字段写成对象配置形式,关闭子文档_id生成:
favorite: {
  type: [
    {
      name: { type: String, required: true },
      rating: { type: Number, default: 0 }
    }
  ],
  _id: false
}
  • 可以按需给子字段加校验规则、默认值,和普通Schema字段的配置方式完全一致。
  • 配置完成后TS类型提示会自动生效,操作favorite字段时会自动校验name为字符串、rating为数字,不会出现类型报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:45:44