Docs 菜单
Docs 主页
/ /
Atlas App Services
/

Schemas

在此页面上

  • Overview
  • 什么是模式?
  • 为什么要定义模式?
  • 定义架构
  • App Service 如何实施架构
  • App Services 模式与内置模式验证

模式是一个JSON对象,用于定义数据的结构和内容。 您可以使用Atlas App Services 的BSON 模式,该模式扩展了JSON schema 标准,用于定义应用程序的数据模型,并在创建、更改或删除文档时验证文档。

架构表示数据类型,而不是具体值。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 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 中的架构不同于 MongoDB 的内置模式验证。两者都使用 JSON schema 标准,并支持 BSON 类型。但是,App Services 不使用集群的内置模式,并且可能以与内置模式不兼容的方式与集群交互。

如果要同时使用 App Services 架构集群的内置模式验证,请考虑以下事项:

  • 最初将集群的模式验证级别设置为“警告”。然后,监控活动并处理现有警告。一旦确信两个模式验证层兼容,您就可以将验证级别升级到“错误”。

  • 如果您正在使用 Device Sync,请避免使用嵌入文档和嵌入文档数组的必填字段。同步协议可能会将有效的嵌入对象写入拆分为多个等效写入,而这些写入不单独包括所有必填字段。

  • 如果正在使用 Device Sync,请避免区分 undefinednull、空数组和不带字段的嵌入式对象。同步协议将这些值视为功能等效值。

如需有关同时使用这两个模式验证层的帮助,请联系 MongoDB 支持人员

后退

定义数据模型