模式类型
在此页面上
所有模式类型
以下字段适用于所有 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 类型数组。不能与 BSON 类型包括所有 JSON 类型,以及您可通过名称引用的其他类型:
|
type | 模式描述的属性的 JSON 类型。如果属性的值可以有多种类型,请指定 JSON 类型数组。不能与 重要Atlas App Services 支持 以下标准 JSON 类型可用:
注意MongoDB 的 JSON 模式实现不支持 |
enum | 包含模式描述的数据的所有有效值的数组。 |
title | 模式建模的数据的短标题或名称。 该字段仅用于元数据目的,对模式验证没有影响。 |
description | 模式建模的数据的详细说明。 该字段仅用于元数据目的,对模式验证没有影响。 |
BSON类型
阵列
array
包含多个特定类型的值。 BSONarray
模式使用标准 JSON schema大量 格式。
{ "bsonType": "array", "items": <Schema Document> | [<Schema Document>, ...], "additionalItems": <boolean> | <Schema Document>, "maxItems": <integer>, "minItems": <integer>, "uniqueItems": <boolean> }
字段名称 | 说明 |
---|---|
items | 所有数组项的模式,或顺序至关重要的模式数组。 |
additionalItems | 默认值: 如果为 如果该值为模式对象,则所有其他字段均必针对此模式进行验证。 注意
|
maxItems | 数组的最大长度。 |
minItems | 数组的最小长度。 |
uniqueItems | 默认: 如果为 |
布尔
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 | 默认: 如果为 |
minimum | 数字的最小值。 |
exclusiveMinimum | 默认: 如果为 |
对象
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 | 默认值: 如果为 如果该值为模式对象,则所有其他字段均必针对此模式进行验证。 |
dependencies | 指定属性和模式依赖。 |
ObjectId
objectId
是BSON对象的12字节标识符。 ObjectId 值最常用作MongoDB集合中文档或同步域中对象的唯一_id
值。
{ "bsonType": "objectId" }
字符串
string
是编码为一系列字符的文本。BSON string
模式使用标准的 JSON schema 字符串 格式。
{ "bsonType": "string", "maxLength": <integer>, "minLength": <integer>, "pattern": "<Regular Expression>" }
字段名称 | 说明 |
---|---|
maxLength | 字符串中的最大字符数。 |
minLength | 字符串的最小字符数。 |
pattern | 必须与字符串值匹配的正则表达式字符串。 |
UUID
uuid
(通用唯一标识符)是一种标准化的 16 字节唯一对象标识符。
{ "bsonType": "uuid" }
二进制数据
binData
是一段非结构化二进制数据。映射到二进制 BSON 类型。始终使用子类型 0。
{ "bsonType": "binData" }
Realm 数据库类型
Realm 数据库类型特定于 Atlas Device SDK。
有关 SDK 特定类型以及如何定义这些类型的更多信息,请参阅 SDK 文档:
计数器
计数器是一种特殊的数字类型,其值可以递增或递减。它映射到 App Services 中的 long
数字类型。
{ "bsonType": "long" }
仅以下 SDK 支持计数器数据类型:
集
集合是一组唯一值。
设置模式是一种 array
模式,其中 uniqueItems
会设为 true
。
{ "bsonType": "array", "uniqueItems": true, "items": { "bsonType": "long" } }
Dictionary
字典是与给定类型的值配对的一组动态且唯一的 string
键。字典在功能上是没有预定义字段名称的对象或文档。
字典模式是一种 object
模式,其中未定义 properties
,而 additionalProperties
的值是字典值类型的模式。
BSON 类型的字典
要存储具有 BSON 类型的值的字典,请将 additionalProperties
设置为该类型的模式。
{ "bsonType": "object", "additionalProperties": { "bsonType": "string" } } }
混合 BSON 类型的字典
要存储具有混合值的字典,请将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
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] } }