Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 MongoDB在插入之前检查属性的类型_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js MongoDB在插入之前检查属性的类型

Node.js MongoDB在插入之前检查属性的类型,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我使用mongoose来定义以下模式: var toySchema = new Schema({ id: {type: String, required: true, unique: true}, name: {type: String, required: true}, price: Number }); 我相信,当我使用db.toys.insert()插入到集合中时,mongo会检查每个属性的类型是否与模式中的类型匹配,但似乎不匹配。例如,id应该是一个字符串,但我

我使用mongoose来定义以下模式:

var toySchema = new Schema({
    id: {type: String, required: true, unique: true},
    name: {type: String, required: true},
    price: Number
});

我相信,当我使用db.toys.insert()插入到集合中时,mongo会检查每个属性的类型是否与模式中的类型匹配,但似乎不匹配。例如,id应该是一个字符串,但我可以插入一个具有整数id的文档。如何将架构强制应用到这些插入内容上?

实际上它可以工作,但不像您预期的那样。如果在模型中指定类型为
Date
的字段,并尝试保存布尔值(例如
true
),则会出现如下错误

Error [ValidationError]: MySchema validation failed: expireAt: Cast to Date failed for value "true" at path ...
您的特定问题的原因可以在

如果传递一个具有toString()函数的元素,Mongoose将调用它,除非该元素是数组或toString()函数严格等于Object.prototype.toString()


您可以添加一个

,实际上它确实有效,但并非如您所期望的那样。如果在模型中指定类型为
Date
的字段,并尝试保存布尔值(例如
true
),则会出现如下错误

Error [ValidationError]: MySchema validation failed: expireAt: Cast to Date failed for value "true" at path ...
您的特定问题的原因可以在

如果传递一个具有toString()函数的元素,Mongoose将调用它,除非该元素是数组或toString()函数严格等于Object.prototype.toString()


您可以添加一个

我还可以插入一个不包含正确属性且属性少于架构要求的文档。我应该以某种方式启用验证吗?您是否省略了
price
属性?我实际上使用了类似{type:“hi}的东西。它没有任何必需的属性,但仍然没有错误地插入。非常奇怪,我在本地尝试了它,如果我省略了一个必需的字段,我会得到一个预期的错误。您使用的是mongoose和mongo的哪个版本?mongo版本是3.6.3,mongoose版本是5.9.13我还能够插入一个不包含正确属性且具有le的文档ss属性比模式所要求的要多。我应该以某种方式启用验证吗?您是否省略了
price
属性?我实际上看到了类似{type:“hi}的东西。它没有任何必需的属性,但仍然没有错误地插入。非常奇怪,我在本地尝试过,如果我省略了一个必填字段,我会得到一个预期的错误。您使用的是什么版本的mongoose和mongo?mongo版本是3.6.3,mongoose版本是5.9.13