javascript - Mongoose 自动改变值的类型
问题描述
在mongoose.model中,我选择了name
astring
的类型和 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));
解决方案
Mongoose
将值转换为相应的类型,如果失败,则从docCastError
抛出:
在运行验证器之前,Mongoose 会尝试将值强制转换为正确的类型。此过程称为转换文档。如果给定路径的转换失败,则该
error.errors
对象将包含一个CastError
对象。
age
例如,您可以通过给定值来尝试此操作'aa'
。
如果要覆盖此行为,可以使用以下选项之一:
- 全局禁用投射:
mongoose.Number.cast(false)
- 仅对给定路径禁用强制转换:
age: {
type: Number,
cast: false // Disable casting just for this path
},
- 使用自定义函数:
age: {
type: Number,
cast: v => { return typeof v === 'number' && !isNaN(v) ? Number(v) : v; } // Override casting just for this path
}
推荐阅读
- google-app-engine - 项目恢复后部署到 GAE 失败
- tensorflow - tf.train.import_meta_graph 的 TensorFlow 问题 - RuntimeError:会话图为空。在调用 run() 之前向图中添加操作
- google-cloud-platform - 代码 403:“请求缺少有效的 API 密钥。” PERMISSION_DENIED 服务帐户密钥 Google Cloud 语音到 python 中的文本 api"
- angular - 未使用的表达式,期望赋值或函数调用 Promise 函数中的 Angular lint 错误
- javascript - 从 Firebase Auth 用户更新提供者信息(云函数)
- json - 如何在 Go 中解析 Firestore get() 快照 JSON 内容?
- c# - 身份不起作用,无法访问身份数据
- javascript - Tampermonkey 脚本未在 Safari 中运行
- maven - 找不到 com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava
- android - 通过Android上的相机拍摄并保存到文件时,如何为照片(不是位图)添加标题(水印)?