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 cómo generar estos modelos de datos, consulta 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
When you configure Device Sync, you specify the data source where you want to store data. This data source may contain multiple databases, and each database may contain multiple collections.
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.
Mapping with Development Mode
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 activado, sincronizar busca una colección cuyo esquema de aplicación Services tenga un title que coincida con el nombre del tipo de objeto Realm de la base de datos de Realm. Esta colección podría estar en cualquier base de datos de su fuente de datos vinculada. No es necesario que esté en la base de datos que añadas 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.
If you later add a new Person object to your application code and then sync it, App Services creates a new collection for this Person object in the Pets database. If you wanted to create a collection for the Person object in a different database, you could Define & Enforce a Schema for the Person object in a different database. Or you could disable and re-enable Development Mode, and select a different database in which to create new collections.
Mappings
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 | Optional properties may contain a null value or be entirely omitted from an object. By default, all properties are optional unless explicitly marked as required. |
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 abres 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 por defecto de 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 de SDK sobre los tipos de datos, consulta lo siguiente:
Propiedades del arreglo
Tanto los modelos de objetos del SDK como los esquemas de App Services admiten propiedades de matriz.
Para detalles específicos del SDK sobre las propiedades de los arreglos, 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:
C++ SDK: version TBD
Flutter SDK: v2.0.0 o posterior
SDK de Kotlin: v2.0.0 o posterior
SDK de .NET: v12.2.0 o posterior
Node.js SDK: v12.9.0 or later
React Native SDK: v12.9.0 or later
Swift SDK: v10.51.0 o posterior
Esta función no es compatible con el SDK de Java.
Puedes contactar con el soporte para obtener más información sobre cómo habilitar esta funcionalidad en una aplicación existente utilizando un SDK compatible.
You can leverage collections (arrays or dictionaries) in mixed properties to store data that does not fit into a pre-defined schema, such as variable JSON data or complex MongoDB documents. Because collections of mixed data can contain other collections of mixed data, you can nest data into complex structures. For an example, refer to the Example Document: Nested Collections of Mixed Data on this page.
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
New App Services Apps using Java SDK cannot synchronize data models with properties of type RealmAny. To use mixed data types with Device Sync in your app, use the Kotlin SDK.
objeto incrustado
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.
For SDK-specific details about embedded objects, refer to the following:
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.
Sets
SDK object models and App Services schemas both support the Set data type. A set is a collection of unique values.
For SDK-specific details about sets, refer to the following:
Para obtener más información sobre cómo modelar conjuntos en un esquema de Servicios de aplicación, consulta Set.
Diccionarios
Los modelos de objetos SDK y los esquemas de los Servicios de Apps son compatibles con el tipo de datos Diccionario. Un conjunto es una colección de valores únicos. Un diccionario es una colección de claves de strings dinámicas y únicas emparejadas con valores de un tipo dado. Un diccionario es funcionalmente un objeto o documento sin nombres de campo predefinidos.
Para obtener detalles específicos del SDK sobre diccionarios, consulta 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 servicios de aplicaciones admiten relaciones de uno a uno y de uno a varios. Los esquemas de servicios de aplicaciones 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
Geospatial data describes points and other data on the Earth's surface. App Services does not have built-in geospatial types. Instead, you model geographic data using standard GeoJSON objects. For more information on geospatial data, refer to Schema Types.
Para obtener detalles específicos del SDK sobre datos geoespaciales, consulte:
Data Model Mapping Example
Este ejemplo muestra cómo modelar un Dog con Device Sync.
Esquema de aplicación Services
This App Services schema creates the Dog data model used by 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 arreglos almacenados en un tipo de datos mixtos. Esto puede 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:
C++ SDK: version TBD
Flutter SDK: v2.0.0 o posterior
SDK de Kotlin: v2.0.0 o posterior
SDK de .NET: v12.2.0 o posterior
Node.js SDK: v12.9.0 or later
React Native SDK: v12.9.0 or later
Swift SDK: v10.51.0 o posterior
Esta función no es compatible con el SDK de Java.
Puedes contactar con el soporte para obtener más información sobre cómo habilitar esta funcionalidad en una aplicación existente utilizando un SDK compatible.