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

模式类型

在此页面上

  • 所有模式类型
  • BSON类型
  • 阵列
  • 布尔
  • 混合
  • 数值
  • 对象
  • ObjectId
  • 字符串
  • UUID
  • 二进制数据
  • Realm 数据库类型
  • 计数器
  • Dictionary
  • BSON 类型的字典
  • 混合 BSON 类型的字典
  • 嵌入式对象字典
  • 地理空间数据
  • GeoJSON Point

以下字段适用于所有 BSON 模式,无论类型如何:

{
"bsonType": "<BSON Type>" | ["<BSON Type>", ...],
"type": "<JSON Type>" | ["<JSON Type>", ...],
"enum": [<Value 1>, <Value 2>, ...],
"description": "<Descriptive Text>,
"title": "<Short Description>"
}
字段名称
说明
bsonType

模式描述的属性的 BSON 类型。如果属性的值可以有多种类型,请指定 BSON 类型数组。不能与 type 字段一起使用。

BSON 类型包括所有 JSON 类型,以及您可通过名称引用的其他类型:

  • double

  • string

  • object

  • array

  • objectId

  • date

  • bool

  • null

  • regex

  • int

  • timestamp

  • long

  • decimal

  • uuid

  • binData

  • mixed

type

模式描述的属性的 JSON 类型。如果属性的值可以有多种类型,请指定 JSON 类型数组。不能与 bsonType 一起使用。

重要

Atlas App Services 支持 type 字段,以保持与 JSON 模式标准的兼容性。不过,我们建议您改用 bsonType 字段。BSON 类型包括所有 JSON 模式类型并支持更多数据类型。

以下标准 JSON 类型可用:

  • object

  • array

  • number

  • boolean

  • string

  • null

注意

MongoDB 的 JSON 模式实现不支持 integer JSON 类型。相反,应使用 bsonType 字段并将 intlong 作为其值。

enum
包含模式描述的数据的所有有效值的数组。
title
模式建模的数据的短标题或名称。 该字段仅用于元数据目的,对模式验证没有影响。
description
模式建模的数据的详细说明。 该字段仅用于元数据目的,对模式验证没有影响。

array包含多个特定类型的值。 BSONarray 模式使用标准 JSON schema大量 格式。

{
"bsonType": "array",
"items": <Schema Document> | [<Schema Document>, ...],
"additionalItems": <boolean> | <Schema Document>,
"maxItems": <integer>,
"minItems": <integer>,
"uniqueItems": <boolean>
}
字段名称
说明
items
所有数组项的模式,或顺序至关重要的模式数组。
additionalItems

默认值:true

如果为 true,则数组可能包含此模式中未定义的其他值。如果为 false ,则只有在 items 数组中显式列出的值才可能会出现在数组中。

如果该值为模式对象,则所有其他字段均必针对此模式进行验证。

注意

additionalItems 字段只影响具有数组值 items 字段的数组模式。如果 items 字段是单一模式对象,则 additionalItems 无效。

maxItems
数组的最大长度。
minItems
数组的最小长度。
uniqueItems

默认: false

如果为 true,则数组中的每个项都必须是唯一的。如果为 false,则多个数组项可能相同。

提示

唯一数组是集合

要对建模,请使用array模式类型,并将uniqueItems设立为true

bool 要么为 true 要么为 false

{ "bsonType": "bool" }

注意

5 月之后创建的应用程序28 、 2024

在 2024 年 5 月 28 日之后创建的 App Services 应用可以在混合数据属性中存储混合数据的集合(数组和字典)。您可以将集合嵌套在其他集合中,这样您就可以存储复杂的数据结构,例如 JSON 或 MongoDB 文档,而无需定义严格的数据模型。

要与Atlas Device SDK一起使用此功能,您必须使用以下最低 SDK 版本之一:

  • C++ SDK:版本待定

  • Flutter SDK:v2.0.0 或更高版本

  • Kotlin SDK:v2.0.0 或更高版本

  • .NET SDK:v12.2.0 或更高版本

  • Node.js SDK:v12.9.0 或更高版本

  • React Native SDK:v12.9.0 或更高版本

  • Swift SDK:v 10.51.0或更高版本

Java SDK 支持此功能。

您可以联系支持部门,了解在使用受支持 SDK 的现有应用中启用此功能的更多信息。

mixed 字段可能包含除嵌入式对象集合或任何 SDK 支持的计数器外的任何模式类型。App Services 不会跨文档强制使用一致的类型,因此两个不同文档可能具有不同类型的值。

混合字段可以存储混合数据的数组字典。同步分别将它们转换为 MongoDB 中的数组和对象。这些混合数据集合还可以包含其他混合数据集合,其中最大深度为 100 层。您可以利用这种灵活性来存储不适合预定义模式的复杂数据结构,例如可变 JSON 数据或复杂的 MongoDB 文档。

混合字段也可以表示关系。同步将这些关系作为 DBRef 转换为 MongoDB,保留数据库名称、集合名称和链接的主键。

{ "bsonType": "mixed" }

number 通常会配置某种类型的数字。BSON 模式使用其他类型来扩展 JSON schema 数值,以便定义整数、浮点数和小数。

{
"bsonType": "number" | "int" | "long" | "double" | "decimal",
"multipleOf": <number>,
"maximum": <number>,
"exclusiveMaximum": <boolean>,
"minimum": <number>,
"exclusiveMinimum": <boolean>
}
字段名称
说明
multipleOf
字段值的整数除数。例如,如果将 multipleOf 设置为 3,则 6 是有效值,但 7 不是有效值。
maximum
该数字的最大值。
exclusiveMaximum

默认: false

如果为true,字段值必须绝对小于maximum值。如果为false,字段值也可能等于 maximum值。

minimum
数字的最小值。
exclusiveMinimum

默认: false

如果为 true,字段值必须绝对大于 minimum 值。如果为 false,字段值也可能等于 minimum 值。

object 是结构化对象,有 string 个键,每个键都有一个类型值。对象表示同步领域中的 Realm 对象和嵌入对象,以及其在 MongoDB 中映射到的文档。

{
"bsonType": "object",
"title": "<Type Name>",
"required": ["<Required Field Name>", ...],
"properties": {
"<Field Name>": <Schema Document>
},
"minProperties": <integer>,
"maxProperties": <integer>,
"patternProperties": {
"<Field Name Regex>": <Schema Document>
},
"additionalProperties": <boolean> | <Schema Document>,
"dependencies": {
"<Field Name>": <Schema Document> | ["<Field Name>", ...]
}
}
字段名称
说明
required
此文档必须包含的字段名称数组。
title
对象的类型名称。App Services 使用此值来命名 GraphQL API 中的文档类型。 (GraphQL 已弃用。了解更多信息)
properties
一个对象,其中每个字段按名称映射到父对象中的一个字段。每个字段的值是配置字段值的模式文档。
minProperties
对象支持的最小字段数。
maxProperties
对象支持的最大字段数。
patternProperties
一个对象,其中每个字段都是正则表达式字符串,并且映射到父对象中匹配的所有字段。每个字段的值是配置匹配字段值的模式文档。
additionalProperties

默认值:true

如果为 true,则文档可能包含此模式中未定义的其他字段。如果为 false,则只有此模式中显式定义的字段才可能会出现在文档中。

如果该值为模式对象,则所有其他字段均必针对此模式进行验证。

dependencies
指定属性和模式依赖。

注意

具有对象模式类型的模型字典

要对字典进行建模,请使用object模式类型,并将additionalProperties设置为存储在字典中的值的对象类型。

objectIdBSON对象的12字节标识符。 ObjectId 值最常用作MongoDB集合中文档或同步域中对象的唯一_id值。

{ "bsonType": "objectId" }

string 是编码为一系列字符的文本。BSON string 模式使用标准的 JSON schema 字符串 格式。

{
"bsonType": "string",
"maxLength": <integer>,
"minLength": <integer>,
"pattern": "<Regular Expression>"
}
字段名称
说明
maxLength
字符串中的最大字符数。
minLength
字符串的最小字符数。
pattern
必须与字符串值匹配的正则表达式字符串。

uuid(通用唯一标识符)是一种标准化的 16 字节唯一对象标识符。

{ "bsonType": "uuid" }

binData 是一段非结构化二进制数据。映射到二进制 BSON 类型。始终使用子类型 0。

{ "bsonType": "binData" }

Realm 数据库类型特定于 Atlas Device SDK。

有关 SDK 特定类型以及如何定义这些类型的更多信息,请参阅 SDK 文档:

计数器是一种特殊的数字类型,其值可以递增或递减。它映射到 App Services 中的 long 数字类型

{ "bsonType": "long" }

仅以下 SDK 支持计数器数据类型:

集合是一组唯一值。

设置模式是一种 array 模式,其中 uniqueItems 会设为 true

{
"bsonType": "array",
"uniqueItems": true,
"items": {
"bsonType": "long"
}
}

字典是与给定类型的值配对的一组动态且唯一的 string 键。字典在功能上是没有预定义字段名称的对象或文档。

字典模式是一种 object 模式,其中未定义 properties,而 additionalProperties 的值是字典值类型的模式。

要存储具有 BSON 类型的值的字典,请将 additionalProperties 设置为该类型的模式。

{
"bsonType": "object",
"additionalProperties": {
"bsonType": "string"
}
}
}

要存储具有混合值的字典,请将additionalProperties设立为true

{
"bsonType": "object",
"additionalProperties": true
}
}

或者,您可以定义完整的mixed模式:

{
"bsonType": "object",
"additionalProperties": {
"bsonType": "mixed"
}
}
}

要存储包含嵌入对象值的字典,请定义 object 模式,并将 title 字段设置为嵌入对象的类型名称:

{
"bsonType": "object",
"additionalProperties": {
"bsonType": "object",
"title": “Address”,
"properties": {
"streetNumber": { "bsonType": "string" },
"street": { "bsonType": "string" },
"city": { "bsonType": "string" },
"province": { "bsonType": "string" },
"country": { "bsonType": "string" },
"postalCode": { "bsonType": "string" }
}
}
}

地理空间数据描述了有关地球表面的点和其他数据。App Services 没有内置地理空间类型。相反,您可以使用标准 GeoJSON 对象对地理数据建模。

GeoJSON Point (GeoPoint) 是地球表面上的单个位置。GeoPoint 模式必须是必填type 字段,类型为 string,始终设置为“点”。

您还必须提供一个 coordinates 字段,它是一个 double 数组。coordinates 数组必须包含至少 2 个 double 值,并且可以包含第三个值:

  • 第一个 double 是该点的经度,介于 -180 到 180 之间。

  • 第二个是纬度(介于 -90 到 90 之间)。

  • 可选的第三个值表示点的高程/高度,以米为单位。Atlas 在执行查询时忽略此值。

注意

无法在 Device Sync 模式中设置所需的阵列,Sync 服务器会检查坐标字段是否存在并满足要求。

如果不使用 Device Sync,还可以使用常规地理空间操作符查询地理空间数据。但是,如果您正在使用 Atlas Device Sync,则以下规则也适用于 GeoPoint 对象:

  • 它的类型必须是 object

  • 它必须嵌入到其他类型中。

  • 只要是 double,coordinates 数组还支持其他值。

  • 还支持在 GeoPoint 对象中添加其他属性。

以下是一个对象的 Device Sync 模式,其具有名为“location”的嵌入式 GeoPoint 属性:

{
"title": "MyObject",
"properties": {
"_id": {
"bsonType": "objectId"
},
"location": {
"bsonType": "object",
"required": [ "type" ],
"properties": {
"type": {
"bsonType": "string",
},
"coordinates": {
"bsonType": "array",
"items": {
"bsonType": "double"
}
}
}
}
}
}

以下代码块显示了遵循此模式的文档。它有一个名为“location”的嵌入式 GeoPoint 对象。

{
"_id": { "$oid": "65039d09fe4e46dddee31a3f" },
"location": {
"type": "Point",
"coordinates": [-122.4, 48.12, 23.0]
}
}

后退

删除模式