Docs Menu
Docs Home
/ /
Defina y actualice su modelo de datos

Mapeo de modelos de datos

Esta página contiene información sobre cómo el esquema de App Services utilizado por Atlas Device Sync se asigna al modelo de objetos SDK utilizado por los SDK de Atlas Device.

Para aprender a generar estos modelos de datos, consulte las siguientes páginas:

Para aprender más sobre cómo Device Sync utiliza estos dos modelos de datos, consulta la Descripción general del modelo de datos Sync.

Al configurar la sincronización de dispositivos, se especifica la fuente de datos donde se almacenarán los datos. Esta fuente puede contener varias bases de datos, y cada base de datos puede contener varias colecciones.

El esquema de App Services asigna los nombres de los objetos de la base de datos de Realm a las colecciones de las bases de datos de la fuente de datos de Device Sync. title El campo de un esquema de App Services se asigna al nombre del tipo de objeto en la base de datos de Realm. Dado que el nombre title determina la asignación entre los objetos de cliente y la colección de Atlas correspondiente, este nombre debe ser único entre todos los esquemas de la fuente de datos sincronizada.

No es necesario que title coincida con el nombre de la colección.

Ejemplo

Considere una aplicación con una base de datos llamada Pets. Puede contener varias colecciones, como Canine y Feline. El esquema de App Services para la colección Canine podría ser similar a El ejemplo a continuación, donde el title campo del esquema es,Dog asignaría un objeto Dog Canine de la Pets base de datos Realm llamado a la colección de la base de datos.

No se podía tener otro esquema cuyo title fuera Dog en el mismo clúster. Por ejemplo, no se podía sincronizar un objeto con un title de Dog con bases de datos Debug y Test del mismo clúster. Si se desea sincronizar el mismo objeto con diferentes colecciones para el desarrollo de aplicaciones, se deben usar diferentes orígenes de datos: un clúster para desarrollo y otro para producción.

Al habilitar el modo de desarrollo en la configuración de sincronización de dispositivos, App Services puede crear automáticamente colecciones y esquemas para los objetos de la base de datos de Realm que sincronice. Estas colecciones se crean en la base de datos que especifique al habilitar el modo de desarrollo.

Con el Modo de Desarrollo habilitado, Sync busca una colección cuyo esquema de App Services tenga un title que coincida con el nombre del tipo de objeto de la base de datos de Realm. Esta colección puede estar en cualquier base de datos de la fuente de datos vinculada. No es necesario que esté en la base de datos que agregue al configurar el Modo de Desarrollo.

Si no hay un title correspondiente en ningún esquema de App Services de tu fuente de datos vinculada, App Services crea una nueva colección para este tipo de objeto. Esta colección se crea en la base de datos que especifiques al habilitar el modo de desarrollo. El nombre de la colección coincide con el tipo de objeto, y el esquema de App Services correspondiente tiene un campo title cuyo valor es el nombre del tipo de objeto. Esto crea la asignación entre el objeto de la base de datos de Realm y la nueva colección.

Ejemplo

Considere un clúster Atlas con una base de datos llamada Pets. Contiene una colección Feline con datos existentes.

En el código de la aplicación, se define un nuevo objeto Dog. Se activa el modo de desarrollo y se especifica la base de datos Pets como la base de datos donde se crearán colecciones para los nuevos tipos de objeto. Al sincronizar el nuevo objeto Dog, App Services crea una colección Dog en la base de datos Pets y crea un esquema para ella. El title del objeto en el esquema es Dog.

Si posteriormente agrega un nuevo Person objeto al código de su aplicación y lo sincroniza, App Services crea una nueva colección para este Person objeto en la Pets base de datos. Si desea crear una colección para el Person objeto en otra base de datos, puede definir y aplicar un esquema para el Person objeto en otra base de datos. También puede deshabilitar y volver a habilitar el modo de desarrollo y seleccionar otra base de datos para crear nuevas colecciones.

El campo title contiene el nombre del tipo de objeto representado por el esquema. Esto equivale a un nombre de clase o esquema en un SDK de dispositivo Atlas. El nombre del tipo debe ser único entre todos los esquemas del clúster sincronizado; de lo contrario, es arbitrario y no necesita coincidir con el nombre de la colección.

Un enfoque convencional consiste en nombrar cada tipo de objeto con un sustantivo singular, como "Perro" o "Persona". Los esquemas generados en modo de desarrollo o mediante el muestreo de documentos existentes utilizan esta convención.

Nota

Para trabajar con Atlas Device Sync, los nombres de tipo no pueden superar los 57 caracteres UTF-8.

Puede configurar las siguientes restricciones para una propiedad determinada:

Parameter
Tipo
Descripción

Tipo

String

Cada propiedad en un modelo de objetos del SDK tiene un tipo de dato claramente definido. El tipo de una propiedad puede ser un tipo de dato primitivo o un tipo de objeto definido en el mismo modelo de objetos del SDK. El tipo también especifica si la propiedad contiene un único valor o una lista de valores.

La base de datos de Realm admite los siguientes tipos de propiedades:

  • booleano

  • entero

  • doble

  • string

  • fecha

  • decimal128

  • ObjectId

  • uuid

  • mixto

  • arreglo

  • Objeto

Para obtener más información sobre los tipos de datos admitidos, consulte Tipos de esquema.

Opcional

Booleano

Las propiedades opcionales pueden contener un valor nulo o ser completamente omitidas de un objeto. De forma predeterminada, todas las propiedades son opcionales a menos que se indique explícitamente como obligatorias.

predeterminado

Booleano

Si una aplicación cliente crea un nuevo objeto que no tiene un valor para una propiedad definida, el objeto utiliza el valor predeterminado en su lugar.

Si abre una base de datos en el cliente con un subconjunto de esquema que no incluye una propiedad requerida, el servidor completará automáticamente el valor de la propiedad requerida con un valor predeterminado cero o en blanco.

Cuando intenta crear un objeto al que le falta un valor para un campo obligatorio, falla la validación y no persiste en el reino.

Indexado

Booleano

Un índice de propiedad aumenta significativamente la velocidad de ciertas operaciones de lectura, a costa de una sobrecarga adicional para las operaciones de escritura. Los índices son especialmente útiles para la comparación de igualdad, como la consulta de un objeto según el valor de una propiedad. Sin embargo, los índices consumen almacenamiento adicional.

Para obtener detalles específicos del SDK sobre los tipos de datos, consulte lo siguiente:

Tanto los modelos de objetos del SDK como los esquemas de App Services admiten propiedades de matriz.

Para obtener detalles específicos del SDK sobre las propiedades de la matriz, consulte lo siguiente:

Para obtener más información sobre el modelado de propiedades de matriz en un esquema de App Services, consulte Tipos BSON - Matriz. Los esquemas de App Services admiten ciertas restricciones que los modelos de objetos del SDK no admiten, como especificar el número mínimo y máximo de elementos.

Tanto los modelos de objetos del SDK como los esquemas de App Services admiten propiedades de tipo mixto.

Un campo mixto puede contener cualquier tipo de datos admitido y actúa funcionalmente como un objeto o documento sin una estructura predefinida.

Para obtener más información sobre cómo modelar propiedades mixtas en un esquema de App Services, consulte Mixto: Tipos de esquema.

Nota

Aplicaciones creadas después del 28 de mayo de 2024

Las aplicaciones de App Services creadas después del de mayo 28 del2024 pueden almacenar colecciones (matrices y diccionarios) de datos mixtos dentro de una propiedad de datos mixtos. Es posible anidar colecciones dentro de otras colecciones, lo que permite almacenar estructuras de datos complejas, como documentos JSON o MongoDB, sin tener que definir un modelo de datos estricto.

Para utilizar esta función con Atlas Device SDK, debe utilizar una de las siguientes versiones mínimas del SDK:

  • SDK de C++: versión por determinar

  • SDK de Flutter: v2.0.0 o posterior

  • SDK de Kotlin: v2.0.0 o posterior

  • SDK de .NET: v12.2.0 o posterior

  • SDK de Node.js: v12.9.0 o posterior

  • SDK de React Native: v12.9.0 o posterior

  • Swift SDK: v10.51.0 o posterior

Esta función no es compatible con el SDK de Java.

Puede comunicarse con el soporte técnico para obtener más información sobre cómo habilitar esta función en una aplicación existente usando un SDK compatible.

Puede aprovechar colecciones (arrays o diccionarios) en propiedades mixtas para almacenar datos que no se ajustan a un esquema predefinido, como datos JSON variables o documentos complejos de MongoDB. Dado que las colecciones de datos mixtos pueden contener otras colecciones de datos mixtos, puede anidar datos en estructuras complejas. Para ver un ejemplo, consulte el documento de ejemplo: Colecciones anidadas de datos mixtos en esta página.

Puede almacenar colecciones en tipos de datos mixtos en un esquema de App Services o en un esquema de modelo de objetos SDK.

Para obtener detalles específicos del SDK sobre tipos de datos mixtos, consulte lo siguiente:

Nota

Las nuevas aplicaciones del SDK de Java no pueden usar RealmAny

Las nuevas aplicaciones de App Services que usan el SDK de Java no pueden sincronizar modelos de datos con propiedades de tipo RealmAny. Para usar tipos de datos mixtos con Device Sync en tu aplicación, usa el SDK de Kotlin.

Los objetos incrustados se integran como datos anidados dentro de un objeto principal. Un objeto incrustado hereda el ciclo de vida de su objeto principal. No puede existir como un objeto de base de datos independiente.

Para obtener detalles específicos del SDK sobre objetos integrados, consulte lo siguiente:

Para obtener más información sobre cómo modelar relaciones de uno a uno en un esquema de App Services, consulte Relaciones de objetos integrados.

Tanto los modelos de objetos del SDK como los esquemas de App Services admiten el tipo de datos Conjunto. Un conjunto es una colección de valores únicos.

Para obtener detalles específicos del SDK sobre conjuntos, consulte lo siguiente:

Para obtener más información sobre el modelado de conjuntos en un esquema de App Services, consulte Conjunto.

Tanto los modelos de objetos del SDK como los esquemas de App Services admiten el tipo de dato Diccionario. Un conjunto es una colección de valores únicos. Un diccionario es una colección de claves de cadena dinámicas y únicas emparejadas con valores de un tipo determinado. Un diccionario es funcionalmente un objeto o documento sin nombres de campo predefinidos.

Para obtener detalles específicos del SDK sobre los diccionarios, consulte lo siguiente:

Para obtener más información sobre el modelado de diccionarios en un esquema de App Services, consulte Diccionario.

Los modelos de objetos del SDK admiten los siguientes tipos de relaciones:

  • Relaciones de uno a uno: una relación de uno a uno significa que un objeto está relacionado de una manera específica con no más de otro objeto.

  • Relaciones de muchos: una relación de muchos significa que un objeto está relacionado de una manera específica con varios objetos.

  • Relaciones inversas: una relación inversa vincula un objeto a cualquier otro objeto que haga referencia a él en una relación definida de uno o de muchos.

Los esquemas de App Services admiten relaciones de uno a muchos.No admiten relaciones inversas.

Para obtener detalles específicos del SDK sobre las relaciones, consulte lo siguiente:

Para obtener más información sobre cómo modelar relaciones en un esquema de App Services, consulta Relaciones.

Los datos geoespaciales describen puntos y otros datos sobre la superficie terrestre. App Services no tiene tipos geoespaciales integrados. En su lugar, se modelan los datos geográficos mediante objetos GeoJSON estándar. Para obtener más información sobre datos geoespaciales, consulte Tipos de esquema.

Para obtener detalles específicos del SDK sobre datos geoespaciales, consulte:

Este ejemplo muestra cómo modelar un Dog con sincronización de dispositivo.

Este esquema de servicios de aplicaciones crea el modelo de datos Dog utilizado por Device Sync.

Modelo de datos de perros definido en el esquema de 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"
}
}
}

Los siguientes ejemplos de código crean el modelo de objeto del SDK Dog en cada uno de los SDKs de Dispositivos Atlas.

Clase de perro definida en el modelo de datos del SDK de Swift
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
}
Clase Dog definida en el modelo de datos del SDK de Java
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; }
}
Clase de perro definida en el modelo de datos del SDK de Kotlin
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
}
Clase de perro definida en el modelo de datos del SDK de Flutter
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;
}
Clase de perro definida en el modelo de datos del SDK de .NET
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; }
}
Clase de perro definida en el modelo de datos del SDK de Node.js
export const DogSchema = {
name: 'Dog',
properties: {
_id: 'objectId',
age: 'int?',
breed: 'string?',
name: 'string',
},
primaryKey: '_id',
details: 'mixed',
};
Clase de perro definida en el modelo de datos del SDK de React Native
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',
};

Una aplicación que utiliza Device Sync para el modelo de datos Dog crea documentos MongoDB en Atlas según los esquemas anteriores.

Documento de perro creado en Atlas
{
"_id": ObjectId('616f44305a205add93ff1081'),
"age": 8,
"breed": "Golden Retriever",
"name": "Jasper",
"details": null
}

Las colecciones anidadas de datos mixtos son diccionarios o matrices almacenadas en un tipo de datos mixto. Esto podría parecerse al siguiente ejemplo:

Documento de perro en MongoDB con datos mixtos
{
"_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"
}
]
}
}

Nota

Aplicaciones creadas después del 28 de mayo de 2024

Las aplicaciones de App Services creadas después del de mayo 28 del2024 pueden almacenar colecciones (matrices y diccionarios) de datos mixtos dentro de una propiedad de datos mixtos. Es posible anidar colecciones dentro de otras colecciones, lo que permite almacenar estructuras de datos complejas, como documentos JSON o MongoDB, sin tener que definir un modelo de datos estricto.

Para utilizar esta función con Atlas Device SDK, debe utilizar una de las siguientes versiones mínimas del SDK:

  • SDK de C++: versión por determinar

  • SDK de Flutter: v2.0.0 o posterior

  • SDK de Kotlin: v2.0.0 o posterior

  • SDK de .NET: v12.2.0 o posterior

  • SDK de Node.js: v12.9.0 o posterior

  • SDK de React Native: v12.9.0 o posterior

  • Swift SDK: v10.51.0 o posterior

Esta función no es compatible con el SDK de Java.

Puede comunicarse con el soporte técnico para obtener más información sobre cómo habilitar esta función en una aplicación existente usando un SDK compatible.

Volver

Realizar cambios disruptivos en el esquema

En esta página