如何对 MongoDB 中的文档值进行类型检查?

Posted

技术标签:

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

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

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

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

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


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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何对 MongoDB 中的文档值进行类型检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择然后对 MongoDB 文档进行排序,然后找到下一个要挖掘的文档?

如何选择然后对 MongoDB 文档进行排序,然后找到下一个要挖掘的文档?

如何对 MySQL JSON 列属性进行空检查?

MongoDB:数据类型插入文档查询文档

MongoDB 字段索引后,如何快速检查一个该字段的数值是不存在的

如何使用 Java 对 MongoDB 中的文档进行批量更新?