模式
概述
什么是模式?
A schema is a JSON object that defines the structure and contents of your data. You can use Atlas App Services' BSON schemas, which extend the JSON Schema standard, to define your application's data model and validate documents whenever they're created, changed, or deleted.
架构表示数据类型,而不是具体值。App Services 支持多种内置架构类型,包括字符串和数字等基元以及对象和数组等结构类型,您可以将它们组合起来创建表示自定义对象类型的架构。
例如,下面是有关汽车数据的基本模式和一些符合该模式的汽车对象:
{ "title": "car", "required": [ "_id", "year", "make", "model", "miles" ], "properties": { "_id": { "bsonType": "objectId" }, "year": { "bsonType": "string" }, "make": { "bsonType": "string" }, "model": { "bsonType": "string" }, "miles": { "bsonType": "number" } } }
{ "_id": ObjectId("5af712eff26b29dc5c51c60f"), "year": "2017", "make": "Honda", "model": "Civic", "miles": 117424 } { "_id": ObjectId("5af714eff24b294c5251cf04"), "year": "2020", "make": "Ford", "model": "Mustang", "miles": 13579 }
为什么要定义模式?
模式是应用程序数据模型的规范。定义模式后,App Services 将为你提供其他工具和服务,以处理符合该模式的数据。
App Services 在许多应用程序服务中使用架构:
Atlas Device Sync 利用模式在领域与 MongoDB Atlas 之间同步数据。应用服务还可以根据您的模式为您生成惯用的 SDK 对象模型。
数据访问规则会在每次请求之前和之后验证数据是否符合您的模式。如果任何文档未能通过验证,App Services 会阻止或回滚整个请求。
定义架构
根级集合模式可以包含描述类型属性的附加模式。每个根级模式都是一个 object
模式,具有以下形式
{ "bsonType": "object", "title": "<Type Name>", "required": ["<Required Field Name>", ...], "properties": { "<Field Name>": <Schema> } }
您可以使用任何支持的模式类型来配置对象的属性:
注意
要了解如何在应用中配置和部署模式,请参阅定义和实施模式。
App Service 如何实施架构
App Services 根据集合模式验证 MongoDB 集合上的所有写操作(插入、更新和删除)。它在每次请求前后都会检查每个文档,确保所有属性都符合模式,并且没有发生无效更改。
App Services 会计算所有文档写入操作的结果,并将其与模式进行比较,然后再将这些写入提交到集群。如果请求中任一写入操作的结果与模式不匹配,App Services 会向用户返回错误,而不对请求进行任何更改。
例子
集合的模式如下:
{ "title": "person", "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" } } }
有权读取和写入所有字段的用户想要更新特定文档的 name
字段。他们发出以下查询:
collection.updateOne( { "_id": BSON.ObjectId("5ae782e48f25b9dc5c51c4d0") }, { "$set": { "name": 42 } } )
该查询尝试将 name
的值设置为数字 42
,但模式要求该值为 string
。即使用户有权更新文档,App Services 也会拒绝此写入操作,因为写入结果不符合模式。
App Services 模式与内置模式验证
App Services 中的架构不同于 MongoDB 的内置模式验证。两者都使用 JSON schema 标准,并支持 BSON 类型。但是,App Services 不使用集群的内置模式,并且可能以与内置模式不兼容的方式与集群交互。
如果要同时使用 App Services 架构和集群的内置模式验证,请考虑以下事项:
最初将集群的模式验证级别设置为“警告”。然后,监控活动并处理现有警告。一旦确信两个模式验证层兼容,您就可以将验证级别升级到“错误”。
如果您正在使用 Device Sync,请避免使用嵌入文档和嵌入文档数组的必填字段。同步协议可能会将有效的嵌入对象写入拆分为多个等效写入,而这些写入不单独包括所有必填字段。
如果正在使用 Device Sync,请避免区分
undefined
、null
、空数组和不带字段的嵌入式对象。同步协议将这些值视为功能等效值。
如果您在同时使用两个模式验证层时需要帮助,请联系MongoDB 支持部门。