Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose更新/findOneAndUpdate时如何验证类型和值_Node.js_Mongodb_Validation_Mongoose_Schema - Fatal编程技术网

Node.js Mongoose更新/findOneAndUpdate时如何验证类型和值

Node.js Mongoose更新/findOneAndUpdate时如何验证类型和值,node.js,mongodb,validation,mongoose,schema,Node.js,Mongodb,Validation,Mongoose,Schema,我已经像这样设置了模式 它在创作上效果很好。如果缺少必需的或错误的类型,它将抛出验证错误。因此,它将检查类型和值(如果我添加额外的validate函数来验证每个字段上的值) 但是,当我尝试更新或查找DoneAndupdate时。我已将RunValidator设置为true。它以某种方式起作用,但它只会验证是否缺少任何必需的数据。但它没有验证类型,可能会自动将我的类型转换为格式 e、 如果我将isAction(预期为布尔值)设置为整数,它将自动转换为布尔值false。所以它有点绕过类型验证。然后它

我已经像这样设置了模式

它在创作上效果很好。如果缺少必需的或错误的类型,它将抛出验证错误。因此,它将检查类型和值(如果我添加额外的validate函数来验证每个字段上的值)

但是,当我尝试更新或查找DoneAndupdate时。我已将RunValidator设置为true。它以某种方式起作用,但它只会验证是否缺少任何必需的数据。但它没有验证类型,可能会自动将我的类型转换为格式

e、 如果我将isAction(预期为布尔值)设置为整数,它将自动转换为布尔值false。所以它有点绕过类型验证。然后它将进入已经是布尔值的验证器函数,但我希望它在进入验证函数之前应该在类型上抛出验证错误

另一个问题是数组和对象。它没有验证对象中deep属性的类型,而是直接进入validate函数

因此,我想看看是否有更好的方法在update/findOneAndUpdate时正确验证类型和值

我搜索了一些mongoose验证器模块,但大多数模块都是每个字段上验证函数的助手。因此,这些数据已经从整数转换为布尔值,并且当时无法检查类型

目前,我只能考虑在插入/更新mongoose之前验证类型和值

const schema=newmongoose.schema({{
身份证:{
类型:字符串,
独一无二:没错,
要求:正确,
},
地址:{
格式化:字符串,
streetAddress:String,
地点:字符串,
地区:字符串,
postalCode:字符串,
国家:字符串,
},
isActive:布尔值,
});
const user=mongoose.model('user',schema);
//这一个与类型的验证一起工作
create({id:'userA'},(err)=>{
控制台日志(err);
});
//无法在FindOn和DupDate上验证类型
update({id:'userA'},{$set:{address:12313}},{runValidators:true},(err)=>{
控制台日志(err);
})这篇文章详细讨论了mongoose验证器

请务必查看查询的前和后钩子部分,该部分列出了Mongoose 4功能count()、find()、findOne()、findOneAndUpdate()和update()的前和后钩子


希望有帮助!!

但是前置和后置钩子的上下文是模型本身。尽管我们可以得到查询,但我需要手动检查和验证数据类型,我希望mongoose会根据模式定义的数据类型自动执行该数据类型,其行为就像创建一个新的数据类型。如果是这样,为什么不亲自执行验证呢在手动更新数据之前。顺便说一句,谢谢您的帮助。