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

Actualiza tu modelo de datos

Al desarrollar una aplicación con Atlas Device Sync, es posible que necesite realizar cambios en su esquema en algún momento, como cuando necesite:

  • Agrega una nueva propiedad a un objeto ya sincronizado

  • Remove a property from an already-synced object

  • Cambiar el tipo almacenado en una propiedad

  • Update an optional property to required

To make it easier to understand how schema changes affect your app, we characterize them as "breaking" versus "non-breaking" changes.

Atlas App Services permite realizar cambios de esquema ininterrumpidos en los dominios sincronizados, lo que permite que los clientes antiguos se sincronicen con los más nuevos.

Breaking schema changes, however, take some planning and work, and should be avoided whenever possible.

Es difícil implementar cambios de esquema innovadores, ya que los clientes antiguos (aquellos que no se han actualizado al nuevo código y esquema) aún necesitan acceder a los datos mediante la definición del esquema anterior. Los clientes actualizados deben trabajar con los nuevos cambios de esquema.

Nota

Realice cambios importantes a través de la interfaz de usuario de Atlas App Services

Dado que los cambios de esquema disruptivos o destructivos requieren un manejo especial, App Services no permite realizar estos cambios mediante la CLI de App Services ni la implementación automatizada con GitHub. En su lugar, debe realizar los cambios disruptivos en la interfaz de usuario de App Services.

Un cambio disruptivo es un cambio que se realiza en el esquema del servidor y que requiere una acción adicional para gestionarse. Un cambio disruptivo en el esquema del servidor requiere que se finalice la sincronización en el backend y luego se vuelva a habilitar. Los cambios disruptivos en el esquema provocan que los clientes no puedan abrir un dominio o que se produzca una pérdida de datos cuando los documentos del servidor no se sincronizan con las aplicaciones del cliente. Impiden que las aplicaciones se recuperen automáticamente tras un restablecimiento del cliente.

A non-breaking change is a change that you can make in your server-side schema or your object model without requiring additional handling in your app. Also known as additive changes, they apply automatically to synced realms.

Nota

Aplicar cambios no disruptivos al cliente puede requerir una migración

When you only make non-breaking changes to the server-side schema, no additional action is required. However, if you then try to apply these changes to your client object model, you may need to perform a migration. If the client device has an existing realm file, you must perform a migration. For details, see the Modify an Object Schema page in your preferred SDK.

El siguiente diagrama muestra los tipos de cambios de esquema que puede realizar y el proceso que sigue para realizarlos. Cada uno de estos cambios se explica con más detalle en la tabla y las secciones siguientes.

Gráfica de flujo de cambios de esquema

Esta tabla resume cada tipo de cambio y si es un cambio crítico o un cambio no disruptivo.

Tipo de cambio
Esquema del lado del servidor
Modelo de objetos del lado del cliente

Irrompible

Irrompible

Irrompible

Irrompible

Irrompible

Irrompible

Irrompible

Irrompible

Noticia de última hora

Irrompible

Noticia de última hora

Irrompible

Rotura*

Rotura*

Rotura*

Rotura*

Noticia de última hora

Noticia de última hora

Noticia de última hora

Noticia de última hora

Tip

Rename a property

Si bien cambiar el nombre de una propiedad u objeto es un cambio radical, algunos SDK de Realm ofrecen una solución alternativa para reasignar el nombre de la propiedad. Consulte Cambiar el nombre de una propiedad para obtener más detalles.

Se aplica a las aplicaciones de App Services creadas después del 13 de septiembre de 2023.

Servicios de aplicaciones Las aplicaciones en modo de desarrollo que se crearon después del de septiembre 13 de2023 pueden realizar cambios importantes desde su código de cliente a los esquemas de objetos sincronizados.

Consulta el Modo de desarrollo para obtener detalles sobre cómo realizar cambios importantes en el Modo de desarrollo.

El modo de desarrollo no es adecuado para producción. Si lo usa, asegúrese de desactivarlo antes de migrar su aplicación a producción.

Puede agregar un tipo de objeto al esquema del lado del servidor o al modelo de objetos del cliente sin realizar ninguna manipulación adicional.

If you want to add an object type to both the server-side schema and the client object model, you can add the object type to the object model, and use Development Mode to let App Services handle the server-side schema updates. Or you can manually add the object type to both the model and the schema.

Nota

These changes may trigger a resync

Cuando se añade un nuevo tipo de objeto Realm, recuperamos los documentos de la colección y los volvemos a insertar en App Services para obtener los nuevos valores. Este es el comportamiento esperado, pero causa una interrupción temporal en la propagación de los cambios mientras se realiza este proceso.

Puede agregar un valor predeterminado a la propiedad requerida de un objeto. Al insertar en la colección un documento de Atlas que no tenga esta propiedad requerida, los clientes de Realm la establecen con el valor predeterminado. Sin embargo, la misma propiedad del documento de Atlas permanece vacía hasta que un cliente la modifique o actualice el documento directamente en Atlas.

Para obtener más información sobre cómo los valores predeterminados son útiles al modificar documentos Atlas existentes,consulte Agregar una propiedad requerida.

Advertencia

Asegúrese de que el tipo de valor predeterminado y el tipo de propiedad sean los mismos

El campo predeterminado no tiene validación de tipo. Si el tipo del campo predeterminado y el tipo de la propiedad no coinciden, el error indicará que falta un campo obligatorio en el documento.

You can add a required property to the client's object model, and use Development Mode to let App Services infer the server-side schema updates. Or you can manually add the required property to both the client model and the Atlas schema. However, you should consider making the property optional to avoid the need to modify existing Atlas documents.

Nota

Required Properties Missing in a Schema Subset Will Default to Zero

Los clientes pueden abrir el dominio con un subconjunto de esquema que no incluya una propiedad obligatoria. El servidor rellena el campo de valor obligatorio faltante con un valor cero o en blanco (como 0, "", o 0.0, según el tipo de propiedad) al sincronizar el documento.

Al agregar una nueva propiedad requerida, debe actualizar los documentos existentes con la nueva propiedad; de lo contrario, no se sincronizarán con el cliente. Esto podría dar a los usuarios del cliente la impresión de que se han perdido los datos. Para solucionar este problema, agregue la nueva propiedad a cada documento afectado y asignándole un valor. Después de actualizar los documentos para que coincidan con el esquema del cliente, se sincronizarán con la aplicación cliente.

When you add a new required property, App Services retrieves the documents for the collection that have new values per the updated schema. App Services iterates through those documents and re-inserts them to get the new values. This is expected behavior, but it does cause a temporary halt to propagating changes while this process is underway.

Importante

Los servicios de aplicaciones utilizan un __realm_sync.unsynced_documents Colección para rastrear documentos no sincronizados. Al añadir una propiedad obligatoria, el proceso de resincronización puede sobrepasar el límite de 100,000 documentos. En este caso, tiene dos opciones:

  • terminate and re-enable sync, even though the change you're making is a non-breaking change.

  • Póngase en contacto con el soporte y solicite un aumento temporal en el límite de documentos no sincronizables.

Si desea agregar una propiedad opcional tanto al esquema del servidor como al modelo de objetos del cliente, puede agregarla al modelo de objetos y usar el modo de desarrollo para que App Services infiera las actualizaciones del esquema del servidor. También puede agregarla manualmente tanto al modelo como al esquema.

Nota

These changes may trigger a resync

Al agregar una nueva propiedad opcional, recuperamos los documentos de la colección que tienen nuevos valores según el esquema actualizado. Los iteramos y los reinsertamos en App Services para obtener los nuevos valores. Este comportamiento es normal, pero detiene temporalmente la propagación de cambios mientras este proceso está en curso.

You can remove an object from the client's object model as a non-breaking change. If you remove the object from the server-side schema, it is a breaking change. For this reason, we recommend you remove the object type from the client-side object model only and leave it in place on the server-side schema.

Puedes remover una propiedad opcional o requerida del Modelo de objeto del lado del cliente y dejarla en su lugar en el esquema del lado del servidor. Este es un cambio no disruptivo del modelo de objetos.

Si se remueve una propiedad del esquema del lado del servidor, se considera un cambio disruptivo. Por esta razón, recomendamos que se remueva la propiedad únicamente del Modelo de objeto del lado del cliente y que permanezca en el esquema del lado del servidor.

Para mantener la compatibilidad con versiones anteriores, eliminar una propiedad de un modelo de objetos del lado del cliente no la elimina de la base de datos. En su lugar, los objetos nuevos conservan la propiedad eliminada y App Services establece el valor en un valor vacío adecuado, como null para propiedades que aceptan valores NULL, 0 para valores enteros o una cadena vacía para valores de cadena.

Changing an object's name on both the server-side schema and the client-side object model is a breaking change. However, some SDKs offer an API to map a new object name to an existing name in the schema. This allows you to rename an object on the client but not change the object name on the server. In this way, you avoid triggering a migration. Object name mapping is supported in the following SDKs:

  • Kotlin

  • Java

  • .NET

  • Flutter

If name mapping is not an option, consider implementing a partner collection strategy, in which you keep the existing collection and schema, and create a new collection with the new schema.

Si decide cambiar el nombre del objeto en lugar de usar la estrategia de recopilación de socios, debe finalizar la sincronización, actualizar manualmente el esquema y volver a habilitarla. Además, la aplicación cliente debe reiniciar el cliente para restaurar la sincronización. En el modo de reinicio predeterminado, el cliente intenta recuperar los cambios no sincronizados antes de reiniciar.

Nota

El modo de desarrollo no actualiza automáticamente su esquema ante cambios importantes.

Cambiar el nombre de una propiedad, tanto en el esquema del servidor como en el modelo de objetos del cliente, supone un cambio radical. Sin embargo, algunos SDK ofrecen una API para asignar un nuevo nombre de propiedad a un nombre existente en el esquema. Esto permite cambiar el nombre de una propiedad en el cliente, pero no en el servidor. De esta forma, se evita la migración. La asignación de nombres de propiedad es compatible con los siguientes SDK:

Advertencia

Update existing documents

Si cambia el nombre de una propiedad en el esquema del servidor, debe actualizar los documentos existentes con ese nuevo nombre; de ​​lo contrario, no se sincronizarán con el cliente. Esto podría dar a los usuarios del cliente la impresión de que se han perdido los datos.

If name mapping is not an option, consider implementing a partner collection strategy, in which you keep the existing collection and schema, and create a new collection with the new schema.

Si eliges cambiar el nombre de la propiedad en lugar de utilizar la estrategia de colección de socios, debes terminar la sincronización, actualizar manualmente el esquema y volver a habilitar la sincronización. Además, tu aplicación cliente debe realizar un restablecimiento del cliente para restaurar sincronizar. En el modo de restablecimiento del cliente por defecto, el cliente intenta recuperar cualquier cambio no sincronizado antes de restablecer.

Al terminar y volver a habilitar la sincronización, también debes actualizar los documentos existentes de Atlas para que puedan sincronizarse con tus aplicaciones clientes. Sin este manejo adicional, esos documentos no se sincronizan y podría parecer en el cliente que los datos se han perdido. Podrías resolver este problema de dos maneras:

  • Cambia el antiguo nombre de campo en cada documento para que coincida con el nuevo esquema

  • Agregue un nuevo campo a cada documento con un nombre que coincida con el nuevo esquema y copie el valor del campo antiguo en él.

After you've made these changes, the appropriate documents sync to the client application.

Cambiar el tipo de propiedad es un cambio disruptivo, tanto en el esquema del lado del servidor como en el Modelo de objeto lado del cliente.

Advertencia

Update existing documents

If you change a property's type in the server-side schema, you must update existing documents with that new property type or they do not sync to the client. This may give client users the impression that the data has been lost.

En lugar de cambiar el tipo de una propiedad, considera implementar la estrategia de colección de emparejamiento, en la que se conserva la colección y el esquema existentes y se crea una nueva colección con el nuevo esquema.

If you choose to change the property's type instead of using the partner collection strategy, you must terminate sync, manually update the schema, and re-enable sync. In addition, your client application must perform a client reset to restore Sync. In the default client reset mode, the client attempts to recover any unsynced changes before resetting.

Nota

El modo de desarrollo no actualiza automáticamente su esquema ante cambios importantes.

Al terminar y volver a habilitar la sincronización, también debes actualizar los documentos existentes de Atlas para que puedan sincronizarse con tus aplicaciones clientes. Sin este manejo adicional, esos documentos no se sincronizan y podría parecer en el cliente que los datos se han perdido. Podrías resolver este problema de dos maneras:

  • Change the old field type on each document to match the new schema

  • Agregue un nuevo campo a cada documento con el tipo que coincida con el nuevo esquema y copie el valor del campo antiguo en él, transformando su tipo.

After you've made these changes, the appropriate documents should once again sync to the client application.

Cambiar el estado de una propiedad entre opcional y obligatorio es un cambio radical tanto para el esquema del lado del servidor como para el modelo de objetos del lado del cliente.

Advertencia

Update existing documents

Si cambia el estado de una propiedad en el esquema del servidor, debe actualizar los documentos existentes con ese nuevo tipo de propiedad; de lo contrario, no se sincronizarán con el cliente. Esto podría dar a los usuarios del cliente la impresión de que se han perdido los datos.

En lugar de cambiar el estado de una propiedad, considere implementar la estrategia de recopilación de socios, en la que conserva la recopilación y el esquema existentes y crea una nueva recopilación con el nuevo esquema.

Si decide cambiar el estado de la propiedad en lugar de usar la estrategia de recopilación de socios, debe finalizar la sincronización, actualizar manualmente el esquema y volver a habilitarla. Además, la aplicación cliente debe realizar un restablecimiento del cliente para restaurar la sincronización. En el modo de restablecimiento predeterminado, el cliente intenta recuperar los cambios no sincronizados antes de reiniciar.

Nota

El modo de desarrollo no actualiza automáticamente su esquema ante cambios importantes.

Una colección asociada es una colección que contiene los mismos datos que la colección original, pero tiene la nueva definición de esquema implementada. Las colecciones asociadas utilizan activadores de base de datos para garantizar que los datos fluyan en ambas direcciones, lo que significa que cuando se escribe en una colección, también se escribe en la otra (con las modificaciones necesarias para el nuevo esquema).

Para implementar un cambio de esquema importante mediante la estrategia de recopilación de socios, consulte Realizar cambios de esquema importantes.

Volver

Generar modelos de objetos SDK