【问题标题】:How to enforce type check for a value of document in MongoDB?如何对 MongoDB 中的文档值进行类型检查?
【发布时间】:2020-10-26 22:34:37
【问题描述】:

在 RDBMS 中,每列都有CHARINTEGER 等类型。

在 MongoDB 中,使用 mongo shell api 在people 集合中添加以下文档:

 > db.people.insert({"name": 1})

MongoDB 允许为 "name" 键添加值 1,这是不正确的


如何在向集合中添加文档之前强制进行类型检查?

【问题讨论】:

    标签: sql mongodb types nosql rdbms


    【解决方案1】:

    你可以这样做。这只是一个例子。

    db.createCollection( "people" , {
       validator: {
         $jsonSchema: {
            bsonType: "object",
            additionalProperties: false, //wont't allow additional properties to be added, Use if you want to restrict people from adding extra fields.
     required: ["name","age"], //document must contain these fields, else operation will fail/log warning depending on `validationLevel` and `validationAction`
            properties: {
               _id : {
                  bsonType: "objectId" },
               name: {
                  bsonType: "string", //type of name
                  description: "required and must be a string" },
               age: {
                  bsonType: "int", //type of age
                  minimum: 0,
                  maximum: 100,
                  description: "required and must be in the range 0-100" }
            }
         }},
         validationLevel: "moderate",
         validationAction: "error"
    })
    
    • 要在创建新集合时指定验证规则,请使用 db.createCollection()validator 选项。然后在文档validator 中使用$jsonSchemainsertupdate 操作执行指定的架构。

    • validationLevel 选项,用于确定 MongoDB 在更新期间对现有文档应用验证规则的严格程度,以及

    • validationAction 选项,它决定 MongoDB 是否应该错误并拒绝违反验证规则的文档,或者警告日志中的违规但允许无效文档。

    • 要将文档验证添加到现有集合,请使用带有validator 选项的collMod 命令。

    • 当您向集合添加验证时,现有文档在修改之前不会进行验证检查。

    请仔细阅读这些链接:-

    https://docs.mongodb.com/manual/core/schema-validation/

    https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/#op._S_jsonSchema

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2010-10-02
      相关资源
      最近更新 更多