Menu Docs

Tipos de esquema

Os seguintes campos estão disponíveis para todos os esquemas BSON, independentemente do tipo:

{
"bsonType": "<BSON Type>" | ["<BSON Type>", ...],
"type": "<JSON Type>" | ["<JSON Type>", ...],
"enum": [<Value 1>, <Value 2>, ...],
"description": "<Descriptive Text>,
"title": "<Short Description>"
}
Nome do campo
Descrição

bsonType

O tipo de BSON da propriedade que o esquema descreve. Se o valor da propriedade puder ser de vários tipos, especifique uma array de tipos de BSON. Não pode ser usado com o campo type .

Os tipos de BSON incluem todos os tipos de JSON, bem como tipos adicionais que você pode referenciar por nome:

  • double

  • string

  • object

  • array

  • objectId

  • date

  • bool

  • null

  • regex

  • int

  • timestamp

  • long

  • decimal

  • uuid

  • binData

  • mixed

type

O tipo de JSON da propriedade que o esquema descreve. Se o valor da propriedade puder ser de vários tipos, especifique uma array de tipos de JSON. Não é possível usar com bsonType.

Importante

Atlas App Services suporta o campo type para manter a compatibilidade com o padrão de JSON schema. No entanto, recomendamos que você use o campo bsonType. Os tipos JSON incluem todos os tipos de JSON schema e suportam ainda mais tipos de dados.

Os seguintes tipos JSON padrão estão disponíveis:

  • object

  • array

  • number

  • boolean

  • string

  • null

Observação

A implementação do JSON schema do MongoDB não oferece suporte ao tipo de JSON integer . Em vez disso, utilize o campo bsonType com int ou long como o valor.

enum

Uma array que inclui todos os valores válidos para os dados que o esquema descreve.

title

Um título ou nome curto para os dados que o esquema modela. Este campo é usado apenas para fins de metadados e não tem impacto na validação de esquema.

description

Uma descrição detalhada dos dados que o esquema modela. Este campo é usado apenas para fins de metadados e não tem impacto na validação de esquema.

Um array contém vários valores de um tipo específico. BSON array Os esquemas usam o JSON schema array de padrão formato.

{
"bsonType": "array",
"items": <Schema Document> | [<Schema Document>, ...],
"additionalItems": <boolean> | <Schema Document>,
"maxItems": <integer>,
"minItems": <integer>,
"uniqueItems": <boolean>
}
Nome do campo
Descrição

items

Um esquema para todos os itens da array ou uma array de esquemas onde a ordem é importante.

additionalItems

Padrão: true.

Se true, a array poderá conter valores adicionais que não estão definidos no esquema. Se false, somente os valores listados explicitamente na array items poderão aparecer na array.

Se o valor for um objeto de esquema, quaisquer campos adicionais deverão ser validados em relação ao esquema.

Observação

O campo additionalItems afeta apenas esquemas de array que possuem um campo items com valor de array. Se o campo items for um objeto de esquema único, additionalItems não terá efeito.

maxItems

O comprimento máximo da array.

minItems

O comprimento mínimo da array.

uniqueItems

Padrão: false

Se true, cada item na array deverá ser exclusivo. Se false, vários itens da array podem ser idênticos.

Dica

Arrays únicas são conjuntos

Para modelar um conjunto, use o array tipo de esquema com uniqueItems definido true como.

Um bool é true ou false.

{ "bsonType": "bool" }

Observação

Aplicativos criados após 28 de maio de 2024

Aplicativos App Services criados após 28 de maio de 2024 podem armazenar coleções (arrays e dicionários) de dados mistos em uma propriedade de dados mistos. Você pode agrupar coleções em outras coleções, o que permite armazenar estruturas de dados complexas, como documentos JSON ou MongoDB, sem precisar definir um modelo de dados restrito.

Para utilizar este recurso com o Atlas Device SDK, você deve utilizar uma das seguintes versões mínimas do SDK:

  • C++ SDK: versão a ser confirmada

  • Flutter SDK: v2.0.0 ou posterior

  • Kotlin SDK: v2.0.0 ou posterior

  • .NET SDK: v12.2.0 ou posterior

  • SDK Node.js. v12,9,0 ou posterior.

  • React Native SDK: v12.9.0 ou posterior

  • Swift SDK: v10.51.0 ou posterior

Este recurso não é suportado no Java SDK.

Você pode entrar em contato com o Suporte para saber mais sobre como ativar esse recurso em um aplicativo existente usando um SDK compatível.

Um campo mixed pode conter qualquer tipo de esquema, exceto objetos incorporados, conjuntos ou qualquer contador compatível com o SDK. O App Services não impõe um tipo consistente entre documentos, de modo que dois documentos diferentes podem ter valores de tipos diferentes.

Os campos mistos podem armazenar arrays e dicionários de dados mistos. A sincronização os traduz para o MongoDB como arrays e objetos, respectivamente. Essas coleções de dados mistos também podem conter outras coleções de dados mistos, com uma profundidade máxima de 100 níveis. Você pode aproveitar essa flexibilidade para armazenar estruturas de dados complexas que, de outra forma, não se encaixariam em um esquema predefinido, como dados JSON variáveis ou documentos complexos do MongoDB.

Os campos mistos também podem representar relacionamentos. A sincronização converte esses relacionamentos para o MongoDB como um DBRef para preservar o nome do banco de dados, o nome da coleção e a chave primária do link.

{ "bsonType": "mixed" }

Um number configura genericamente algum tipo de número. Os esquemas BSON ampliam os números do JSON schema com tipos adicionais para definir números inteiros, flutuantes e decimais.

{
"bsonType": "number" | "int" | "long" | "double" | "decimal",
"multipleOf": <number>,
"maximum": <number>,
"exclusiveMaximum": <boolean>,
"minimum": <number>,
"exclusiveMinimum": <boolean>
}
Nome do campo
Descrição

multipleOf

Um divisor inteiro do valor do campo. Por exemplo, se multipleOf estiver definido como 3, 6 é um valor válido, mas 7 não é.

maximum

O valor máximo do número.

exclusiveMaximum

Padrão: false

Se true, o valor do campo deverá ser estritamente menor que o valor maximum . Se false, o valor do campo também poderá ser igual ao valor maximum .

minimum

O valor mínimo do número.

exclusiveMinimum

Padrão: false

Se true, o valor do campo deve ser estritamente maior que o valor minimum. Se false, o valor do campo também pode ser igual ao valor minimum.

Um object é um objeto estruturado com string chaves que cada uma tem um valor digitado. Os Objeto de Realm representam Objeto de Realm e objetos incorporados em realms sincronizados, bem como os documentos que eles mapeiam no 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>", ...]
}
}
Nome do campo
Descrição

required

Uma array de nomes de campos que devem ser incluídos no documento.

title

Um nome de tipo para o objeto. App Services usam esse valor para nomear o tipo do documento na GraphQL API. (GraphQL está obsoleto. Saiba mais)

properties

Um objeto em que cada campo é mapeado para um campo no objeto pai por nome. O valor de cada campo é um documento de esquema que configura o valor do campo.

minProperties

O número mínimo de campos permitidos no objeto.

maxProperties

O número máximo de campos permitidos no objeto.

patternProperties

Um objeto em que cada campo é uma string de expressão regular que mapeia para todos os campos no objeto pai correspondentes. O valor de cada campo é um documento de esquema que configura o valor dos campos correspondentes.

additionalProperties

Padrão: true.

Se true, um documento pode conter campos adicionais que não estão definidos no esquema. Se false, somente os campos explicitamente definidos no esquema poderão aparecer em um documento.

Se o valor for um objeto de esquema, quaisquer campos adicionais deverão ser validados em relação ao esquema.

dependencies

Especifique as dependências da propriedade e do esquema.

Observação

Dicionários de modelo com o tipo de esquema de objetos

Para modelar dicionários, use o tipo de esquema object com additionalProperties definido como o tipo de objeto dos valores armazenados no dicionário.

Um objectId é um identificador de 12bytes para objetos BSON . Os valores ObjectId são mais comumente usados como valores _id exclusivos de documentos em uma collection do MongoDB ou objetos em um Realm sincronizado.

{ "bsonType": "objectId" }

Um string é codificado por texto como uma série de caracteres. Os esquemas BSON string usam o formato padrão de string do JSON schema.

{
"bsonType": "string",
"maxLength": <integer>,
"minLength": <integer>,
"pattern": "<Regular Expression>"
}
Nome do campo
Descrição

maxLength

O número máximo de caracteres na string.

minLength

O número mínimo de caracteres na string.

pattern

Uma string de expressão regular que deve corresponder ao valor da string.

Um uuid (Identificador Único Universal) é um identificador de objeto exclusivo de 16bytes. padronizado.

{ "bsonType": "uuid" }

Um binData é um fragmento de dados binários não estruturados. Mapeia para o tipo de BSON binário. Sempre usa o subtipo 0.

{ "bsonType": "binData" }

Os tipos de bancos de dados Realm são específicos para Atlas Device SDK.

Para obter mais informações sobre os tipos específicos do SDK e como defini-los, consulte a documentação do SDK:

Um contador é um tipo numérico especial cujo valor pode ser incrementado ou diminuído. Ele mapeia para o tipo de número long no App Services.

{ "bsonType": "long" }

Os tipos de dados de contador são suportados apenas nos seguintes SDKs:

Um conjunto é uma collection de valores únicos.

Um esquema de conjunto é um esquema array onde uniqueItems está configurado para true.

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

Um dicionário é uma coleção de chaves string dinâmicas e exclusivas emparelhadas com valores de um determinado tipo. Um dicionário é funcionalmente um objeto ou documento sem nomes de campo predefinidos.

Um esquema de dicionário é um esquema object em que properties não está definido e o valor de additionalProperties é um esquema para o tipo de valor do dicionário.

Para armazenar um dicionário com valores de um tipo de BSON, configure additionalProperties para o esquema do tipo.

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

Para armazenar um dicionário com valores mistos , configure additionalProperties para true:

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

Alternativamente, você pode definir um esquema completo mixed:

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

Para armazenar um dicionário com valores de objeto embutidos, defina um esquema object com o campo title definido para o nome do tipo de objeto embutido:

{
"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" }
}
}
}

Os dados geoespaciais descrevem pontos e outros dados na superfície da Terra. O App Services não tem tipos geoespaciais integrados. Em vez disso, você modela dados geográficos utilizando objetos GeoJSON padrão.

Um ponto GeoJSON (GeoPoint) é um local único na superfície da Terra. O esquema do GeoPoint deve ser um campo type obrigatório, do tipo string, que está sempre definido como "Point ".

Você também deve fornecer um campo coordinates, que é uma array de double. A array coordinates deve conter pelo menos 2 valores double e pode conter um terceiro:

  • O primeiro double é a longitude do ponto, entre -180 e 180.

  • O segundo é a latitude, entre -90 e 90.

  • O terceiro valor opcional representa a elevação/altitude do ponto, em metros. O Atlas ignora este valor ao executar consultas.

Observação

Você não pode definir uma array como obrigatória em um esquema do Device Sync, portanto o servidor de sincronização verifica se o campo de coordenadas está presente e atende aos requisitos.

Se você não estiver usando o Device Sync, poderá consultar seus dados geoespaciais com operadores geoespaciais regulares. No entanto, se você estiver usando o Atlas Device Sync, as seguintes regras também se aplicam ao objeto GeoPoint:

  • Deve ser do tipo object.

  • Deve ser incorporado em outro tipo.

  • Valores adicionais são permitidos dentro da array coordinates, desde que sejam double.

  • Propriedades adicionais no objeto GeoPoint também são permitidas.

A seguir está o esquema Device Sync de um objeto com uma propriedade GeoPoint incorporada chamada "localização":

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

O seguinte bloco de código mostra um documento que segue o esquema. Ele tem um único objeto GeoPoint incorporado chamado "localização".

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