Mapeamento do modelo de dados
Nesta página
- reconhecimento de data center, collection e objeto
- Mapeamento com modo de desenvolvimento
- mapeamentos
- Nome do Tipo
- Tipos de propriedade
- propriedade da matriz
- Propriedades mistas
- Objetos embarcados
- Conjuntos
- Dicionários
- Relacionamentos
- Dados geoespaciais
- Exemplo de mapeamento do modelo de dados
- appservices schema
- Modelo de objeto do SDK
- Dados no Atlas
Esta página contém informações sobre como o esquema Atlas App Services usado pelo Atlas Device Sync é mapeado para o modelo de objeto do SDK usado pelos Atlas Device SDKs.
Para saber como gerar esses modelos de dados, consulte as seguintes páginas:
Para gerar modelos de objeto SDK a partir de seus esquemas do Atlas App Services , consulte Gerar modelos de objeto SDK.
Para gerar esquemas do Atlas App Services a partir do código do cliente Atlas Device SDK , consulte Gerar esquema do Atlas App Services a partir de um modelo de objeto do SDK.
Para saber mais sobre como o Device Sync usa esses dois modelos de dados, consulte a visão geral do modelo de dados de sincronização.
reconhecimento de data center, collection e objeto
Ao configurar o Realm Mobile Sync, você especifica o conjunto de dados onde deseja armazenar os dados. Esse conjunto de dados pode conter vários reconhecimento de data center, e cada reconhecimento de data center pode conter várias collection.
O App Services mapeia os nomes de objeto do Realm para collection em reconhecimento de data center em seu conjunto de dados do Realm Mobile Sync. O campo title
em um esquema do App Services é mapeado para o nome do Tipo de objeto de Realm no reconhecimento de data center Realm. Como o nome title
determina o mapeamento entre os objeto do cliente e a collection apropriada do Atlas, esse nome deve ser exclusivo entre todos os esquemas no seu conjunto de dados sincronizado.
O title
não precisa corresponder ao nome da collection.
Exemplo
Considere um aplicativo com um banco de dados de dados denominado Pets
. Ele pode conter várias collections, como Canine
e Feline
. O esquema do App Services para a coleção Canine
pode se assemelhar ao exemplo abaixo, onde o campo title
do esquema é Dog
. Isso mapearia um objeto do banco de dados Realm chamado Dog
para a coleção Canine
no banco de banco de dados Pets
.
Você não poderia ter outro esquema cujo title
fosse Dog
no mesmo cluster. Por exemplo, não é possível sincronizar um objeto com um title
de Dog
para um reconhecimento de data center Debug
e um reconhecimento de data center Test
no mesmo cluster. Se você quiser sincronizar o mesmo objeto com diferentes collection para fins de desenvolvimento de aplicativos, deverá usar diferentes conjunto de dados - um cluster para desenvolvimento e outro cluster para produção.
Mapeamento com modo de desenvolvimento
Quando você habilita o modo de desenvolvimento na configuração do Realm Mobile Sync, o App Services pode criar automaticamente collection e esquemas para objeto do Realm que você sincroniza. Ele cria essas collection no reconhecimento de data center que você especifica ao habilitar o modo de desenvolvimento.
Com o modo de desenvolvimento habilitado, a sincronização procura uma coleção cujo esquema do App Services tenha um title
que corresponda ao nome do seu tipo de objeto do banco de dados Realm. Essa collection pode estar em qualquer reconhecimento de data center em seu conjunto de dados vinculada. Ele não precisa estar no banco de dados que você adiciona ao configurar o modo de desenvolvimento.
Se não houver um title
correspondente em nenhum esquema do App Services no seu conjunto de dados vinculado, o App Services criará uma nova collection para esse Tipo de objeto de Realm. Essa collection é criada no reconhecimento de data center que você especifica ao habilitar o modo de desenvolvimento. O nome da collection corresponde ao Tipo de objeto de Realm e o esquema correspondente do App Services tem um campo title
cujo valor é o nome do Tipo de objeto de Realm. Isso cria o mapeamento entre o objeto do reconhecimento de data center do Realm e a nova collection.
Exemplo
Considere um cluster do Atlas com um reconhecimento de data center chamado Pets
. Ele contém uma Feline
collection com dados existentes.
No código do aplicativo, você define um novo objeto Dog
. Você habilita o modo de desenvolvimento e especifica o reconhecimento de data center Pets
como o reconhecimento de data center no qual criar collection para novos Tipo de objeto de Realm. Quando você sincroniza seu novo objeto Dog
, o App Services cria uma collection Dog
no reconhecimento de data center Pets
e cria um esquema para ela. O title
do objeto no esquema é Dog
.
Se, posteriormente, você adicionar um novo objeto Person
ao código do aplicativo e depois sincronizá-lo, o Atlas App Services criará uma nova coleção para esse objeto Person
no banco de dados Pets
. Se você quisesse criar uma coleção para o objeto Person
em um banco de dados diferente, poderia Definir e Aplicar um Esquema para o objeto Person
em um banco de dados diferente. Ou você pode desabilitar e reativar o Modo de desenvolvimento e selecionar um banco de dados diferente no qual criar novas collections.
mapeamentos
Nome do Tipo
O campo title
contém o nome do tipo de objeto representado pelo esquema. Isso é equivalente a um nome de classe ou esquema em um Atlas Device SDK. O nome do tipo deve ser exclusivo entre todos os esquemas em seu cluster sincronizado, mas é arbitrário e não precisa corresponder ao nome da coleção.
Uma abordagem convencional é nomear cada Tipo de objeto de Realm com um nome singular, como "Dog" ou "Pessoa". Os esquemas gerados no modo de desenvolvimento ou por amostragem de documentos existentes usam essa convenção.
Observação
Para trabalhar com o Atlas Device Sync, os nomes de tipo não podem exceder 57 caracteres UTF-8.
Tipos de propriedade
Você pode configurar as seguintes restrições para uma determinada propriedade:
Parâmetro | Tipo | Descrição |
---|---|---|
Tipo | String | Cada propriedade em um modelo de objeto do SDK tem um tipo de dados fortemente definido. O tipo de uma propriedade pode ser um tipo de dados primitivo ou um tipo de objeto definido no mesmo modelo de objeto do SDK. O tipo também especifica se a propriedade contém um único valor ou uma lista de valores. O reconhecimento de data center do Realm suporta os seguintes tipos de propriedade:
Para obter mais informações sobre os tipos de dados suportados, consulte Tipos de Esquema. |
Opcional | Boolean | Propriedade opcionais podem conter um valor nulo ou ser totalmente omitidas de um objeto. Por padrão, todas as propriedades são opcionais, a menos que explicitamente marcadas como obrigatórias. |
Default | Boolean | Se um aplicativo cliente criar um novo objeto que não tenha um valor para uma propriedade definida, o objeto usará o valor padrão. Se você abrir um banco de dados no cliente com um subconjunto de esquema que não inclua uma propriedade obrigatória, o servidor preencherá automaticamente o valor da propriedade obrigatória com um valor padrão zero ou em branco. Quando você tenta criar um objeto que não tem um valor para um campo obrigatório, ele falha na validação e não persiste no Realm. |
Indexado | Boolean | Um índice de propriedade aumenta significativamente a velocidade de certas operações de leitura ao custo de sobrecarga adicional para operações de gravação. Os índices são particularmente úteis para comparação de igualdade, como fazer query de um objeto com base no valor de uma propriedade. No entanto, os índices consomem armazenamento adicional. |
Para obter detalhes específicos do SDK sobre tipos de dados, consulte o seguinte:
propriedade da matriz
Os modelos de objeto do SDK e os esquemas Atlas App Services suportam propriedades de array.
Para obter detalhes específicos do SDK sobre propriedades da array, consulte o seguinte:
Para obter mais informações sobre como modelar propriedades de array em um esquema do Atlas App Services , consulte BSON types - Array. Os esquemas Atlas App Services suportam determinadas restrições que os modelos de objeto do SDK não suportam, como especificar o número mínimo e máximo de itens.
Propriedades mistas
Os modelos de objeto do SDK e os esquemas Atlas App Services oferecem suporte a propriedades de tipo misto.
Um campo misto pode conter qualquer tipo de dados suportado e funcionalmente atua como um objeto ou documento sem uma estrutura predefinida.
Para obter mais informações sobre a modelagem de propriedades mistas em um esquema do Atlas App Services , consulte Misto - Tipos de esquema.
Coleções em propriedades mistas
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.
Você pode aproveitar coleções (arrays ou dicionários) em propriedades mistas para armazenar dados que não se encaixam em um esquema predefinido, como dados JSON variáveis ou documentos complexos do MongoDB. Como as collections de dados mistos podem conter outras collections de dados mistos, você pode aninhar dados em estruturas complexas. Para obter um exemplo, consulte o Documento de exemplo: coleções aninhadas de dados mistos nesta página.
Você pode armazenar collections em tipos de dados mistos em um esquema do Atlas App Services ou em um esquema de modelo de objeto do SDK.
Para obter detalhes específicos do SDK sobre tipos de dados mistos, consulte o seguinte:
Observação
Novos aplicativos Java SDK não podem usar RealmAny
Novos aplicativos de serviços de aplicativos que usam o Java SDK não podem sincronizar modelos de dados com propriedades do tipo RealmAny
. Para usar tipos de dados mistos com o Device Sync em seu aplicativo, use o Kotlin SDK.
Objetos embarcados
Objetos embarcados são embarcados como dados aninhados dentro de um objeto pai. Um objeto embarcado herda o ciclo de vida de seu objeto pai. Não pode existir como um objeto de banco de dados independente.
Para obter detalhes específicos do SDK sobre objetos incorporados, consulte o seguinte:
Para obter mais informações sobre a modelagem de relacionamentos um-para-um em um esquema do Atlas App Services , consulte Relacionamentos de objetos incorporados.
Conjuntos
Os modelos de objeto do SDK e os esquemas do Atlas App Services são compatíveis com o tipo de dados Set. Um conjunto é uma collection de valores únicos.
Para obter detalhes específicos do SDK sobre conjuntos, consulte o seguinte:
Para obter mais informações sobre como modelar conjuntos em um esquema do Atlas App Services , consulte Conjunto.
Dicionários
Os modelos de objeto do SDK e os esquemas do Atlas App Services oferecem suporte ao tipo de dados Dicionário. Um conjunto é uma collection de valores únicos. Um dicionário é uma coleção de chaves de string dinâmicas e únicas emparelhadas com valores de um determinado tipo. Um dicionário é funcionalmente um objeto ou documento sem nomes de campo predefinidos.
Para obter detalhes específicos do SDK sobre dicionários, consulte o seguinte:
Para obter mais informações sobre como modelar dicionários em um esquema do Atlas App Services , consulte Dicionário.
Relacionamentos
Os modelos de objeto do SDK oferecem suporte aos seguintes tipos de relacionamentos:
Relacionamentos um-para-um: um relacionamento um-para-um significa que um objeto está relacionado de uma forma específica a não mais do que um outro objeto.
Relacionamentos para muitos: uma relação para muitos significa que um objeto está relacionado de uma maneira específica a vários objetos.
Relacionamento inverso: um relacionamento inverso vincula um objeto a qualquer outro objeto que se refira a ele em um relacionamento definido como "um" ou "muitos".
Os esquemas do Atlas App Services oferecem suporte a relações para-um e para-muitos. Os esquemas do Atlas App Services não suportam relações inversas.
Para obter detalhes específicos do SDK sobre relacionamentos, consulte o seguinte:
Para obter mais informações sobre como modelar relacionamentos em um esquema do Atlas App Services , consulte Relacionamentos.
Dados geoespaciais
Os dados geoespaciais descrevem pontos e outros dados na superfície da Terra. Atlas App Services não tem tipos geoespaciais integrados. Em vez disso, você modela dados geográficos utilizando objetos GeoJSON padrão. Para mais informações sobre dados geoespaciais, consulte Tipos de Esquema.
Para detalhes específicos do SDK sobre dados geoespaciais, consulte:
Exemplo de mapeamento do modelo de dados
Este exemplo mostra como modelar um Dog
com o Realm Mobile Sync.
appservices schema
Este esquema do Atlas App Services cria o modelo de dados do Dog
utilizado pelo Device Sync.
{ "title": "Dog", "bsonType": "object", "required": [ "_id", "name" ], "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "age": { "bsonType": "int" } "breed": { "bsonType": "string" } "details": { "bsonType": "mixed" } } }
Modelo de objeto do SDK
Os seguintes exemplos de código criam o modelo de objeto do SDK do Dog
em cada um dos Atlas Device SDKs.
import Foundation import RealmSwift class Dog: Object { true) var _id: ObjectId (primaryKey: var age: Int? var breed: String? var name: String = "" var details: AnyRealmValue }
import io.realm.RealmObject; import org.bson.types.ObjectId; public class Dog extends RealmObject { private ObjectId _id; private Integer age; private String breed; private String name; private RealmAny details; // Standard getters & setters public ObjectId getId() { return _id; } public void setId(ObjectId _id) { this._id = _id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } public String getName() { return name; } public void setName(String name) { this.name = name; } public RealmAny getDetails() { return details; } public void setDetails(RealmAny details) { this.details = details; } }
import io.realm.RealmObject; import org.bson.types.ObjectId; open class Dog : RealmObject { var _id: ObjectId = ObjectId(), var age: Int? = null, var breed: String? = null, var name: String = "" var details: RealmValue? = null }
import 'package:realm/realm.dart'; part 'realm_models.realm.dart'; ()class _Dog { () '_id') ( late ObjectId id; int? age; String? breed; late String name; late RealmValue details; }
using System; using System.Collections.Generic; using Realms; using MongoDB.Bson; public class Dog : RealmObject { [ ] [ ] public ObjectId Id { get; set; } [ ] public int? Age { get; set; } [ ] public string Breed { get; set; } [ ] [ ] public string Name { get; set; } [ ] public RealmValue Details { get; set; } }
export const DogSchema = { name: 'Dog', properties: { _id: 'objectId', age: 'int?', breed: 'string?', name: 'string', }, primaryKey: '_id', details: 'mixed', };
export const DogSchema = { class Dog extends Realm.Object<Dog> { _id!: Realm.BSON.ObjectId; age?: number; breed?: string; name!: string; details?: Realm.Mixed; static schema: ObjectSchema = { name: 'Dog', properties: { _id: 'objectId', age: 'int?', breed: 'string?', name: 'string', details: 'mixed?', }, primaryKey: '_id', };
Dados no Atlas
Um aplicativo utilizando o Device Sync para o modelo de dados do Dog
cria documentos MongoDB no Atlas baseado nos esquemas anteriores.
Documento de exemplo
{ "_id": ObjectId('616f44305a205add93ff1081'), "age": 8, "breed": "Golden Retriever", "name": "Jasper", "details": null }
Documento de exemplo: coleções aninhadas de dados mistos
As coleções aninhadas de dados mistos são dicionários ou arrays armazenados em um tipo de dados misto. Isso pode se assemelhar ao exemplo a seguir:
{ "_id": ObjectId('616f44305a205add93ff1081'), "age": 8, "breed": "Golden Retriever", "name": "Jasper", "details": { "vaccinations": ["rabies", "distemper"], "weight": 65.5, "isNeutered": true, "vetVisits": [ { "date": 2002-08-18T04:56:07.000+00:00, "reason": "annual checkup" }, { "date": 2003-08-18T04:56:07.000+00:00, "reason": "annual checkup" } ] } }
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.