Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/ /

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 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.

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.

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.

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.

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:

  • booleano

  • inteiro

  • double

  • string

  • data

  • Decimal128

  • ObjectId

  • uuid

  • misto

  • array

  • objeto

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:

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.

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.

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 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.

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.

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.

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.

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:

Este exemplo mostra como modelar um Dog com o Realm Mobile Sync.

Este esquema do Atlas App Services cria o modelo de dados do Dog utilizado pelo Device Sync.

Modelo de dados do cão definido no esquema do Atlas App Services
{
"title": "Dog",
"bsonType": "object",
"required": [
"_id",
"name"
],
"properties": {
"_id": {
"bsonType": "objectId"
},
"name": {
"bsonType": "string"
},
"age": {
"bsonType": "int"
}
"breed": {
"bsonType": "string"
}
"details": {
"bsonType": "mixed"
}
}
}

Os seguintes exemplos de código criam o modelo de objeto do SDK do Dog em cada um dos Atlas Device SDKs.

Classe de cão definida no modelo de dados do Swift SDK
import Foundation
import RealmSwift
class Dog: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var age: Int?
@Persisted var breed: String?
@Persisted var name: String = ""
@Persisted var details: AnyRealmValue
}
classe Cão definida no modelo de dados do Java SDK
import io.realm.RealmObject;
import org.bson.types.ObjectId;
public class Dog extends RealmObject {
@PrimaryKey
@Required
private ObjectId _id;
private Integer age;
private String breed;
@Required
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; }
}
classe do cão definida no modelo de dados do Kotlin SDK
import io.realm.RealmObject;
import org.bson.types.ObjectId;
open class Dog : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId(),
var age: Int? = null,
var breed: String? = null,
var name: String = ""
var details: RealmValue? = null
}
classe do cão definida no modelo de dados do Flutter SDK
import 'package:realm/realm.dart';
part 'realm_models.realm.dart';
@RealmModel()
class _Dog {
@PrimaryKey()
@MapTo('_id')
late ObjectId id;
int? age;
String? breed;
late String name;
late RealmValue details;
}
classe Dog definida no modelo de dados do .NET SDK
using System;
using System.Collections.Generic;
using Realms;
using MongoDB.Bson;
public class Dog : RealmObject
{
[MapTo("_id")]
[PrimaryKey]
public ObjectId Id { get; set; }
[MapTo("age")]
public int? Age { get; set; }
[MapTo("breed")]
public string Breed { get; set; }
[MapTo("name")]
[Required]
public string Name { get; set; }
[MapTo("details")]
public RealmValue Details { get; set; }
}
classe Dog definida no modelo de dados do Node.js SDK
export const DogSchema = {
name: 'Dog',
properties: {
_id: 'objectId',
age: 'int?',
breed: 'string?',
name: 'string',
},
primaryKey: '_id',
details: 'mixed',
};
classe do cão definida no modelo de dados do React Native SDK
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',
};

Um aplicativo utilizando o Device Sync para o modelo de dados do Dog cria documentos MongoDB no Atlas baseado nos esquemas anteriores.

Documento do cão criado no Atlas
{
"_id": ObjectId('616f44305a205add93ff1081'),
"age": 8,
"breed": "Golden Retriever",
"name": "Jasper",
"details": null
}

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:

Documento de cão no MongoDB com dados mistos
{
"_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.

Voltar

Fazer alterações significativas no esquema