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 generar modelos de objetos SDK a partir de sus esquemas de App Services, consulte Generar modelos de objetos SDK.
Para generar los esquemas de aplicación Services a partir de código de cliente del Atlas Device SDK, consulta Generar esquema de aplicación Services a partir de Modelo de objeto SDK.
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.
Bases de datos, colecciones y objetos
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.
Mapeo con modo de desarrollo
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.
Mapeos
Nombre del tipo
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.
Tipos de propiedad
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:
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:
Propiedades del arreglo
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.
Propiedades mixtas
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.
Colecciones en Propiedades Mixtas
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.
Objetos incrustados
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.
Establece
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.
Diccionarios
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.
Relaciones
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.
Datos geoespaciales
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:
Ejemplo de mapeo de modelos de datos
Este ejemplo muestra cómo modelar un Dog con sincronización de dispositivo.
Esquema de servicios de aplicaciones
Este esquema de servicios de aplicaciones crea el modelo de datos Dog utilizado por 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 objetos del SDK
Los siguientes ejemplos de código crean el modelo de objeto del SDK Dog en cada uno de los SDKs de Dispositivos Atlas.
import Foundation import RealmSwift class Dog: Object { (primaryKey: true) var _id: ObjectId 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', };
Datos en Atlas
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 ejemplo
{ "_id": ObjectId('616f44305a205add93ff1081'), "age": 8, "breed": "Golden Retriever", "name": "Jasper", "details": null }
Documento de ejemplo: Colecciones anidadas de datos mixtos
Las colecciones anidadas de datos mixtos son diccionarios o matrices almacenadas en un tipo de datos mixto. Esto podría parecerse al siguiente ejemplo:
{ "_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.