Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 cómo generar estos modelos de datos, consulta 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.

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.

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.

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

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:

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.

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:

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

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.

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.

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.

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.

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:

Este ejemplo muestra cómo modelar un Dog con Device Sync.

This App Services schema creates the Dog data model used by 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; }
}
Dog class defined in Kotlin SDK data model
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 Dog definida en el modelo de datos .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; }
}
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',
};
Dog class defined in React Native SDK data model
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 arreglos almacenados en un tipo de datos mixtos. Esto puede 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:

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

Volver

Realizar cambios disruptivos en el esquema

En esta página