通过Postman向MongoDB插入数据时触发必填字段验证失败
以下是针对性的排查方向和验证步骤:
确认Postman请求头的Content-Type设置
必须将请求头的Content-Type设为application/json。如果未设置或设置为text/plain等其他类型,MongoDB无法正确解析请求体,会导致字段无法被识别,触发必填字段缺失错误。操作时在Postman的「Headers」标签中检查并添加该头信息。校验Postman请求体的JSON格式
检查请求体是否存在语法错误:比如使用中文引号、遗漏逗号、键名未加双引号等。mongosh对JSON语法的容错性较高,但Postman的JSON解析器更严格,语法错误会导致文档结构被破坏。可以将请求体复制到本地JSON校验工具中验证,确保与mongosh中执行的插入语句完全一致。检查请求体是否被意外转义或包裹
若Postman的请求体被错误地包裹成字符串(例如"{\"name\":\"test\",\"box_size\":10}"),MongoDB会将其识别为单一字符串字段,而非预期的文档结构,自然会提示必填字段缺失。需在Postman的「Body」标签中选择「raw」->「JSON」格式,重新粘贴或输入正确的JSON内容。验证集合的Schema规则是否正确
在mongosh中执行db.getCollectionInfos({name: "sample"}),查看集合的验证规则细节:- 确认
required数组中的字段名拼写完全正确,无大小写或字符错误; - 检查
validationLevel和validationAction配置:若validationAction设为warn,mongosh仅会输出警告但允许插入,而Postman使用的驱动可能将警告判定为错误;若validationLevel设为moderate,仅对已有文档的更新做验证,但新插入仍需符合规则,这点需结合实际场景确认。
- 确认
核对字段数据类型与Schema要求
比如Schema定义box_size为number类型,但Postman发送的是字符串类型("box_size": "10"),此时验证会因类型不匹配触发错误;而mongosh中直接输入box_size: 10是数字类型,符合规则所以插入成功。需对比mongosh插入语句和Postman请求体的字段类型,确保完全匹配。排查API转发层的修改(若有)
如果Postman是通过自定义API接口转发请求到MongoDB,需检查API层是否对请求体做了字段过滤、格式转换等操作,导致原始请求的字段被修改或丢失。
内容的提问来源于stack exchange,提问作者Fehmy

