Schemas
Nesta página
Visão geral
O que é um esquema?
Um esquema é um objeto JSON que define a estrutura e o conteúdo dos seus dados. Você pode usar os esquemas de BSON do Atlas App Services, que estendem o JSON schema para definir o modelo de dados do seu aplicativo e validar documentos sempre que forem criados, alterados ou excluídos.
Os esquemas representam tipos de dados em vez de valores específicos. Os Serviços de Aplicativo oferecem suporte a muitos tipos de esquema integrados. Isso inclui primitivos, como strings e números, bem como tipos estruturais, como objetos e arrays, que você pode combinar para criar esquemas que representam tipos de objetos personalizados.
Por exemplo, esse é um esquema básico para dados sobre carros e alguns objetos de carros que estão em conformidade com o esquema:
{ "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 }
Por que definir um esquema?
Esquemas são a especificação do modelo de dados do seu aplicativo. Depois de definir um esquema, o App Services fornece ferramentas e serviços adicionais para trabalhar com dados que estejam em conformidade com o esquema.
O App Services usa esquemas em muitos serviços de aplicativos:
O Atlas Device Sync usa esquemas para sincronizar dados entre domínios e o MongoDB Atlas. O App Services também pode gerar modelos de objetos de SDK idiomáticos para você com base em seus esquemas.
As regras de acesso a dados validam a conformidade dos dados com seu esquema antes e depois de cada solicitação. Se algum documento falhar na validação, o App Services impedirá ou reverterá a solicitação na íntegra.
Definir um esquema
Um esquema de collection em nível de raiz pode conter esquemas adicionais que descrevem as propriedades do tipo. Cada esquema de nível de raiz é um esquema object
que tem a seguinte forma:
{ "bsonType": "object", "title": "<Type Name>", "required": ["<Required Field Name>", ...], "properties": { "<Field Name>": <Schema> } }
Você pode usar qualquer um dos tipos de esquema suportados para configurar as propriedades do objeto:
Observação
Para saber como configurar e implantar um esquema em seu aplicativo, consulte Definir e aplicar um esquema.
Como o App Services aplica esquemas
O App Services valida todas as operações de gravação (inserções, atualizações e exclusões) em uma collection do MongoDB em relação ao seu esquema de collection. Ele verifica cada documento antes e depois de cada solicitação para garantir que todas as propriedades estejam em conformidade com o esquema e que não tenham ocorrido alterações inválidas.
O App Services avalia o resultado de todas as gravações de documentos e as compara com o esquema antes de confirmar as gravações em seu cluster. Se o resultado de qualquer operação de gravação em uma solicitação não corresponder ao esquema, o App Services retornará um erro ao usuário sem aplicar alterações na solicitação.
Exemplo
Uma collection tem o seguinte esquema:
{ "title": "person", "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" } } }
Um usuário com permissão para ler e gravar todos os campos deseja atualizar o campo name
de um documento específico. Eles emitem a seguinte query:
collection.updateOne( { "_id": BSON.ObjectId("5ae782e48f25b9dc5c51c4d0") }, { "$set": { "name": 42 } } )
A query tenta definir o valor de name
para o número 42
, mas o esquema requer que o valor seja uma string
. O App Services rejeitará essa operação de gravação mesmo que o usuário tenha permissão para atualizar o documento porque o resultado da gravação não está em conformidade com o esquema.
Esquema do App Services vs. validação de esquema integrada
Um esquema no App Services não é o mesmo que a que a validação de esquema integrada do MongoDB. Ambos usam o padrão de JSON schema com suporte adicional para tipos de BSON. No entanto, o App Services não usa o esquema incorporado do cluster e pode interagir com o cluster de uma forma incompatível com um esquema incorporado.
Se você quiser usar esquemas do App Services e a validação de esquema interna do cluster ao mesmo tempo, considere o seguinte:
Defina inicialmente o nível de validação de esquema do seu cluster para "aviso". Em seguida, monitore a atividade e resolva os avisos existentes. Quando tiver certeza de que as duas camadas de validação de esquema são compatíveis, você pode atualizar o nível de validação para "erro".
Se estiver usando o Device Sync, evite campos obrigatórios para documentos incorporados e arrays de documentos incorporados. O protocolo de sincronização pode quebrar uma gravação de objeto embarcado válido em várias gravações equivalentes que não incluem individualmente todos os campos obrigatórios.
Se você estiver usando o Device Sync, evite distinguir entre
undefined
,null
, arrays vazias e objetos embarcados sem campos. O protocolo de sincronização trata esses valores como equivalentes funcionais.
Se precisar de ajuda para trabalhar com as duas camadas de validação de esquema simultaneamente, entre em contato com o Suporte do MongoDB.