【问题标题】:MongoDB check types of attributes before insertMongoDB在插入前检查属性类型
【发布时间】:2020-08-25 13:05:49
【问题描述】:

我正在使用 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 的文档。如何将架构强制到这些插入上?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    实际上它确实有效,但并不像您预期​​的那样。如果您在模型中指定 Date 类型的字段并尝试保存布尔值(例如 true),那么您将收到类似的错误

    Error [ValidationError]: MySchema validation failed: expireAt: Cast to Date failed for value "true" at path ...
    

    您的特定问题的原因可以在documentation中找到

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

    您可以添加custom validator

    【讨论】:

    • 我还能够插入不包含正确属性且属性少于架构要求的文档。我应该以某种方式启用验证吗?
    • 您是否省略了price 属性?
    • 我实际上看起来像 {type: "hi}。它没有任何必需的属性但仍然插入没有错误。很奇怪
    • 我已经在本地尝试过,如果我省略了必填字段,我会收到预期的错误。你用的是什么版本的 mongoose 和 mongo?
    • Mongo 版本是 3.6.3,mongoose 是 5.9.13
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2019-09-29
    • 2018-11-05
    • 2021-11-14
    • 1970-01-01
    • 2020-10-28
    • 2018-07-01
    相关资源
    最近更新 更多