MongoDB Mongoose创建实例时自动生成空数组问题及解决
Mongoose创建实例时Array字段自动生成空数组的原因与解决方法
问题重现
原始数据模式定义:
const dataSchema = mongoose.Schema({ userID: String, userStocks: Array, stockMarket: Array, }); module.exports = mongoose.model('Data', dataSchema);
创建空实例时:
var regUser = new Data({}); console.log(regUser);
输出结果中stockMarket和userStocks字段自动被设为[]空数组,但userID这类String类型字段未赋值则不会出现在实例中。尝试用delete regUser.stockMarket、聚合$unset和$merge移除这些空数组字段均无效。
原因
Mongoose对Schema中直接声明为Array类型的字段,默认会将**空数组[]**作为该字段的默认值。当创建实例未给这类字段赋值时,Mongoose会自动填充默认值;而String、Number等基础类型没有预设默认值,未赋值时不会被添加到实例中。
解决方法
修改Schema,将数组字段的定义改为对象形式,显式设置default: undefined,阻止Mongoose自动填充空数组:
const dataSchema = mongoose.Schema({ userID: String, userStocks: { type: Array, default: undefined }, stockMarket: { type: Array, default: undefined } });
这样创建未赋值的实例时,userStocks和stockMarket字段不会被自动添加,只有当你主动给这些字段赋值时才会出现在实例中。
内容的提问来源于stack exchange,提问作者Gabrielnigme20
相关产品推荐
相关产品推荐

