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

