NestJS+Mongoose API异常:POST请求仅保存_id和__v至MongoDB
解决NestJS + Mongoose POST请求仅保存_id和__v的问题
下面是针对你遇到的问题的常见排查方向和解决方案:
1. 检查Mongoose Schema的字段定义
这是最常见的原因:你的application.schema.ts中没有为需要存储的字段添加@Prop()装饰器,或者装饰器配置有误。
错误示例:
@Schema() export class Application { // 无@Prop()装饰器,Mongoose会忽略该字段 name: string; }
正确示例:
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; import { Document } from 'mongoose'; export type ApplicationDocument = Application & Document; @Schema() export class Application { @Prop({ required: true }) // 必填字段添加required配置 name: string; @Prop() email: string; @Prop({ default: Date.now }) // 可设置字段默认值 createdAt: Date; } export const ApplicationSchema = SchemaFactory.createForClass(Application);
2. 确认DTO与Schema的字段名完全匹配
Mongoose对字段名大小写敏感,务必保证createApplication.dto.ts中的字段名和Schema里的完全一致。比如Schema定义的是userEmail,但DTO里写的是useremail,会直接导致字段无法映射存储。
3. 验证请求体是否被正确接收
在控制器的POST方法中打印接收到的DTO,确认请求数据是否被正确解析:
@Post('applications') async createApplication(@Body() createApplicationDto: CreateApplicationDto) { console.log('接收的请求数据:', createApplicationDto); // 打印数据确认完整性 return this.eventsService.createApplication(createApplicationDto); }
如果打印结果为空或缺少字段,说明NestJS未正确解析请求体,检查是否在全局/模块中禁用了JSON解析器,或者请求头未设置Content-Type: application/json。
4. 检查Mongoose的strict模式
Mongoose默认开启strict模式(值为true),会忽略Schema中未定义的字段。如果需要存储Schema未定义的字段,可修改Schema配置:
@Schema({ strict: false }) // 关闭strict模式,不推荐,建议优先明确定义字段 export class Application { // ...字段定义 }
注意:关闭strict模式会降低数据一致性,优先推荐在Schema中明确定义所有需要存储的字段。
5. 检查版本兼容性
@nestjs/mongoose和mongoose版本不匹配也可能引发这类问题,确保两者版本兼容。可查看NestJS官方文档的版本要求,或执行以下命令更新到兼容版本:
npm install @nestjs/mongoose@latest mongoose@latest
6. 检查Service层的实例化代码
确保Service中正确将DTO数据传入Model实例:
// events.service.ts async createApplication(createApplicationDto: CreateApplicationDto): Promise<Application> { const newApplication = new this.applicationModel(createApplicationDto); console.log('待保存的文档:', newApplication); // 打印待保存数据确认完整性 return newApplication.save(); }
如果打印的newApplication只有_id和__v,说明DTO数据未正确传入,检查依赖注入是否正常。
内容的提问来源于stack exchange,提问作者codepip55
相关产品推荐
相关产品推荐

