Mongoose Schema.create()未写入全部字段至MongoDB,求助排查
解决Mongoose Schema.create()无法写入全部字段的问题
问题根源
你提供的User Schema存在字段嵌套错误:phone、password、role、status、shippingAddress等字段被错误放在了email字段的定义对象内部,导致这些字段并非Schema的顶层属性。Mongoose只会处理Schema顶层定义的字段,所以即便请求传入了这些字段,也不会被写入数据库,role、status的默认值自然也不会生效。
修复后的User Schema代码
将嵌套错误的字段移至顶层,与email同级:
const mongoose = require('mongoose'); const adressSchema = require('./entities/adress.entities'); const cardSchema = require('./entities/card.entities'); const UserSchema = mongoose.Schema({ id: {type: String}, username: {type: String, required: true}, address: {type: adressSchema, required: true}, creditCards: [cardSchema], // email字段独立定义,仅保留自身配置 email: { type: String, required: true, lowercase: true, validate: { validator: function (v) { return v.length>1 && /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(v); }, message: props => `${props.value} is not a valid email!` } }, // 以下字段移至Schema顶层 phone : { type: mongoose.Schema.Types.String, required: true, validate: { validator: function (v) { return v.length > 1 && /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/.test(v); }, message: props => `${props.value} is not a valid phone number!` } }, shippingAddress:[adressSchema], role: { type: mongoose.Schema.Types.String, enum: ['admin', 'user','owner'], default: 'user', required: true }, password: {type: String, required: true}, lastLogin: {type: Date}, status: { type: String, enum: ['active', 'blocked', 'deleted'], default: 'active', required: true }, image: String },{timestamps: true});
修复后效果
- 请求传入的
phone、password等字段会被正常写入MongoDB role(默认值user)、status(默认值active)的默认配置会自动生效address字段需确保请求传入的数据结构与adressSchema匹配,即可正常存储
内容的提问来源于stack exchange,提问作者Fuse Koda
相关产品推荐
相关产品推荐

