首页 > 解决方案 > Mongoose 自动改变值的类型

问题描述

mongoose.model中,我选择了nameastring的类型和 a 的类型,但是当我输入一个数字作为 name 的值时,我没有收到错误,当我使用某些东西时age也会number发生同样的事情就像'18'年龄的值一样。

这是代码:

const User = mongoose.model('User', {
  name: { type: String },
  age: { type: Number }
});

const me = new User({
  name: 12,
  age: '18'
});

me.save().then(() => console.log(me)).catch(error => console.log(error));

标签: javascriptmongodbmongoose

解决方案


Mongoose将值转换为相应的类型,如果失败,则从docCastError抛出:

在运行验证器之前,Mongoose 会尝试将值强制转换为正确的类型。此过程称为转换文档。如果给定路径的转换失败,则该error.errors对象将包含一个CastError对象。

age例如,您可以通过给定值来尝试此操作'aa'

如果要覆盖此行为,可以使用以下选项之一:

  1. 全局禁用投射:mongoose.Number.cast(false)
  2. 仅对给定路径禁用强制转换:
age: {
  type: Number, 
  cast: false // Disable casting just for this path
},
  1. 使用自定义函数:
age: {
    type: Number,
    cast: v => { return typeof v === 'number' && !isNaN(v) ? Number(v) : v; } // Override casting just for this path
  }

推荐阅读