Docs Menu
Docs Home
/ /
Sincronizar datos

Administrar suscripciones de sincronización - SDK de React Native

Flexible Sync usa suscripciones y permisos para determinar qué datos sincronizar con tu aplicación. Debes tener al menos una suscripción antes de poder leer o escribir en un dominio con Flexible Sync habilitado. @realm/react La biblioteca agiliza los permisos y las consultas para las suscripciones de sincronización.

Puedes agregar, actualizar y eliminar suscripciones de consultas para controlar qué datos se sincronizan con el dispositivo cliente. En Realm.js v12.0.0 y versiones posteriores, puedes suscribirte a consultas en lugar de administrar las suscripciones manualmente, o además de hacerlo.

No puedes crear suscripciones para Ingesta de datos y objetos asimétricos porque solo envían datos al backend de App Services.

Importante

Limitaciones de las consultas de sincronización flexible

Las suscripciones de sincronización flexible solo admiten un subconjunto de operadores de consulta RQL. Consulte la documentación sobre las limitaciones de RQL de sincronización flexible para obtener información sobre los operadores no compatibles.

Debe cumplir los siguientes requisitos antes de poder usar Atlas Device Sync con el SDK de React Native:

Antes de poder agregar suscripciones de sincronización flexible a un cliente React Native, debes:

  1. Configurar la sincronización flexible en el backend

  2. Inicializar el cliente de la aplicación

  3. Autenticar un usuario en el cliente

  4. Configurar un reino sincronizado

Las consultas de suscripción del lado del cliente deben estar alineadas con la configuración de sincronización del dispositivo en su aplicación de servicios de aplicaciones de backend.

Las consultas de suscripción devuelven todos los objetos de un tipo. Puede filtrar los resultados con una consulta de lenguaje de consulta de Realm que incluya uno o más campos consultables.

Para obtener más información sobre cómo configurar campos consultables, consulte Campos consultables en la documentación de App Services.

Para obtener más información sobre las limitaciones del uso del lenguaje de consulta Realm con Flexible Sync, consulte la sección Limitaciones de RQL de Flexible Sync.

Novedades en la realm@12.0.0 versión.

realm@12.0.0 Añade API experimentales que se suscriben y cancelan la suscripción a los resultados de una consulta. Estas API simplifican la adición y eliminación manual de suscripciones.

Para todas las suscripciones, necesita un usuario autenticado y un reino de sincronización flexible.

Cambiado en la realm@12.3.0 versión: Datos geoespaciales compatibles con Atlas Device Sync

En Realm.js v12.3.0 y versiones posteriores, puede crear suscripciones a consultas geoespaciales. Si intenta suscribirse a una consulta geoespacial con una versión anterior del SDK, recibirá un error de servidor con una escritura compensatoria.

Para obtener más información, consulte Geospatial - React Native SDK.

Le recomendamos que asigne un nombre a sus suscripciones. Esto facilita su búsqueda y gestión. Los nombres de las suscripciones deben ser únicos. Si intenta agregar una suscripción con el mismo nombre que una ya existente, esta se sobrescribirá.

Para suscribirse a una consulta:

  1. Consulta los objetos que quieres leer y escribir.

  2. Llame a subscribe() en los resultados de la consulta para crear una suscripción de sincronización para los objetos que coincidan con la consulta.

  3. Pase un objeto SubscriptionOptions que contenga la propiedad name a subscribe().

import React, {useEffect, useState} from 'react';
import {useRealm, useQuery} from '@realm/react';
import {View, Text, FlatList} from 'react-native';
import {Bird} from '../../models';
import {Subscription} from 'realm/dist/bundle';
export const BasicSubscription = () => {
const realm = useRealm();
// Get all local birds that have not been seen yet.
const seenBirds = useQuery(Bird, collection =>
collection.filtered('haveSeen == true'),
);
const [seenBirdsSubscription, setSeenBirdsSubscription] =
useState<Subscription | null>();
useEffect(() => {
// Create an async function so that we can `await` the
// promise from `.subscribe()`.
const createSubscription = async () => {
await seenBirds.subscribe({
name: 'Birds I have seen',
});
};
createSubscription().catch(console.error);
// Get the subscription...
const subscription = realm.subscriptions.findByName('Birds I have seen');
// ... and set it to a stateful variable or manage it in `useEffect`.
setSeenBirdsSubscription(subscription);
}, []);
return (
// Work with the subscribed results list or modify the subscription...
<></>
);
};

Generalmente, deberías asignar un nombre a tus suscripciones. Si no, el nombre se establece en null.

Si usa filtered() en una suscripción de consulta sin nombre, el identificador de la suscripción se basa en la consulta filtered. Esto significa que cada vez que cambie la cadena de consulta, subscribe() creará una nueva suscripción.

Referencia de API

Al suscribirse a los resultados de una consulta, estos no contienen objetos hasta que se descargan los datos sincronizados. Si necesita esperar a que se descarguen los objetos sincronizados, configure la opción waitForSync.

Este ejemplo utiliza la opción FirstTime, que es el comportamiento predeterminado. Una suscripción con el comportamiento FirstTime solo espera a que finalice la sincronización al crearse la suscripción.

import React, {useEffect, useState} from 'react';
import {BSON, WaitForSync} from 'realm';
import {useRealm, useQuery} from '@realm/react';
import {View, Text, Button, TextInput, FlatList} from 'react-native';
import {Bird} from '../../models';
import {Subscription} from 'realm/dist/bundle';
export const WaitFirstTime = () => {
const realm = useRealm();
const [birdName, setBirdName] = useState('Change me!');
// Get local birds that have been marked as "haveSeen".
const seenBirds = useQuery(Bird, collection =>
collection.filtered('haveSeen == true'),
);
const [seenBirdsSubscription, setSeenBirdsSubscription] =
useState<Subscription | null>();
useEffect(() => {
const createSubscription = async () => {
// Only wait for sync to finish on the initial sync.
await seenBirds.subscribe({
behavior: WaitForSync.FirstTime,
name: 'First time sync only',
});
};
createSubscription().catch(console.error);
// Get the subscription...
const subscription = realm.subscriptions.findByName('First time sync only');
// ... and set it to a stateful variable or manage it in `useEffect`.
setSeenBirdsSubscription(subscription);
}, []);
return (
// Work with the subscribed results list or modify the subscription...
<></>
);
};

Las otras opciones admitidas WaitForSync son:

  • Always: Espera a que se descarguen los objetos coincidentes cada vez que se inicia la aplicación. La aplicación debe tener conexión a internet cada vez que se inicia.

  • NeverNo esperes para descargar los objetos coincidentes. La aplicación necesita conexión a internet para que el usuario se autentique la primera vez que se inicia, pero puede abrirse sin conexión en los siguientes inicios usando credenciales en caché.

Opcionalmente, puede especificar un valor timeout para limitar el tiempo que dura la descarga sincronizada:

export const AlwaysWait = () => {
const realm = useRealm();
// Get all local birds that have not been seen yet.
const unSeenBirds = useQuery(Bird, collection =>
collection.filtered('haveSeen == false'),
);
const [unSeenBirdsSubscription, setUnseenBirdsSubscription] =
useState<Subscription | null>();
useEffect(() => {
const createSubscription = async () => {
// Add subscription with timeout.
// If timeout expires before sync is completed, currently-downloaded
// objects are returned and sync download continues in the background.
await unSeenBirds.subscribe({
behavior: WaitForSync.Always,
name: 'Always wait',
timeout: 500,
});
};
createSubscription().catch(console.error);
// Get the subscription...
const subscription = realm.subscriptions.findByName('Always wait');
// ... and set it to a stateful variable or manage it in `useEffect`.
setUnseenBirdsSubscription(subscription);
}, []);
return (
// Work with the subscribed results list or modify the subscription...
<></>
);
};

Referencia de API

Las suscripciones se mantienen entre sesiones de usuario a menos que las canceles. Puedes cancelar la suscripción a los resultados de una consulta usando unsubscribe().

Esto elimina la suscripción de la lista de suscripciones activas, de forma similar a eliminar una suscripción manualmente.

Una lista de resultados aún puede contener objetos después de llamar a unsubscribe() si existe otra suscripción que contiene objetos superpuestos.

Al llamar a unsubscribe(), se elimina la suscripción asociada. Las suscripciones se eliminan por nombre. Si no tienen nombre, unsubscribe() elimina cualquier consulta que coincida exactamente con la consulta en la que se llama a unsubscribe().

El método unsubscribe() regresa antes de que se eliminen del dominio los objetos que coinciden con la suscripción eliminada. La sincronización continúa en segundo plano según el nuevo conjunto de suscripciones.

import React, {useEffect, useState} from 'react';
import {useRealm, useQuery} from '@realm/react';
import {View, Text, Button} from 'react-native';
import {Bird} from '../../models';
import {Subscription} from 'realm/dist/bundle';
export const Unsubscribe = () => {
const realm = useRealm();
const birds = useQuery(Bird);
const unsubscribeFromQuery = () => {
birds.unsubscribe();
};
return (
<View>
<Button
title="Unsubscribe"
onPress={() => {
unsubscribeFromQuery();
}}
/>
</View>
);
};

Referencia de API

Puede utilizar la API de suscripciones para administrar manualmente un conjunto de suscripciones a consultas específicas en campos consultables.

Puede utilizar la API Realm.subscriptions para administrar un conjunto de suscripciones a consultas específicas en campos consultables.

Si @realm/react usas, puedes administrar las suscripciones de dominio dentro de un RealmProvider correctamente configurado. El gancho useRealm() te da acceso al dominio abierto.

Puedes hacer lo siguiente con tus suscripciones:

Cuando los datos coinciden con la suscripción y el usuario autenticado tiene los permisos adecuados, Device Sync sincroniza los datos del backend con la app del cliente.

Al crear una suscripción, Realm busca datos que coincidan con una consulta sobre un tipo de objeto específico. Puede tener suscripciones para varios tipos de objeto. También puede tener varias consultas sobre el mismo tipo de objeto.

Importante

Enlaces de objetos

Debe agregar un objeto y su objeto vinculado al conjunto de suscripciones para ver un objeto vinculado.

Si los resultados de su suscripción contienen un objeto con una propiedad que enlaza a un objeto no incluido en los resultados, el enlace parece nulo. No hay forma de distinguir si el valor de esa propiedad es legítimamente nulo o si el objeto al que enlaza existe, pero no está visible para la suscripción de consulta.

Dentro de un RealmProvider configurado para Flexible Sync, puedes acceder a un SubscriptionSet. Un SubscriptionSet es una colección de todas las suscripciones de tu aplicación.

import React, {useEffect, useState} from 'react';
import {Text, FlatList} from 'react-native';
import {useRealm, useQuery} from '@realm/react';
import {Bird} from '../Models/Bird';
function SubscriptionManager() {
const realm = useRealm();
// Pass object model to useQuery and filter results.
// This does not create a subscription.
const seenBirds = useQuery(Bird, birds => {
return birds.filtered('haveSeen == true');
});
const [subscriptions, setSubcriptions] = useState<
App.Sync.SubscriptionSet | undefined
>();
useEffect(() => {
const createSubscription = async () => {
// Create subscription for filtered results.
await realm.subscriptions.update(mutableSubs => {
mutableSubs.add(seenBirds, {name: 'seen birds'});
});
};
createSubscription().catch(console.error);
// Set to state variable.
setSubcriptions(realm.subscriptions);
}, []);
return (
<FlatList
data={subscriptions}
keyExtractor={subscription => subscription.id.toString()}
renderItem={({item}) => <Text>{item.name}</Text>}
/>
);
}

Referencia de API

En el siguiente ejemplo, se han establecido completed y progressMinutes como campos consultables en una aplicación de App Services. En el código del cliente, creamos consultas filtradas y luego nos suscribimos a sus resultados:

  • Tareas completadas

  • Tareas completadas que han ocupado 120 progressMinutes

Tenga en cuenta que useQuery() necesita una suscripción activa para devolver resultados. Si aún no se ha añadido ninguna suscripción, useQuery() devuelve un resultado vacío, que no es un query válido para MutableSubscriptionSet.add().

import React, {useEffect} from 'react';
import {Text, FlatList} from 'react-native';
import {useRealm, useQuery} from '@realm/react';
function SubscriptionManager() {
const realm = useRealm();
const seenBirds = useQuery(Bird, birds => {
return birds.filtered('haveSeen == true');
});
useEffect(() => {
realm.subscriptions.update(
(mutableSubs: Realm.App.Sync.MutableSubscriptionSet) => {
// Create subscription for filtered collection.
mutableSubs.add(seenBirds, {name: 'seenBirds'});
},
);
});
return (
<FlatList
data={seenBirds}
keyExtractor={item => item._id.toString()}
renderItem={({item}) => <Text>{item._id.toString()}</Text>}
/>
);
}

Debe tener al menos una suscripción para poder leer o escribir en un dominio de sincronización flexible. Las suscripciones iniciales le permiten definir suscripciones al configurar un dominio sincronizado.

Para abrir un reino sincronizado con suscripciones iniciales, agregue una propiedad initialSubscriptions a la configuración de sincronización de un RealmProvider.

No se pueden usar los @realm/react ganchos useQuery y de la biblioteca useObject al configurar las suscripciones iniciales. En su lugar, se deben usar las operaciones de lectura y escritura de Realm.js.

import React from 'react';
import {AppProvider, UserProvider} from '@realm/react';
// get realm context from createRealmContext()
import {RealmContext} from '../RealmConfig';
import {Text, FlatList} from 'react-native';
const {RealmProvider, useQuery} = RealmContext;
function AppWrapper() {
return (
<AppProvider id={APP_ID}>
<UserProvider fallback={LogIn}>
<RealmProvider
sync={{
flexible: true,
initialSubscriptions: {
update(subs, realm) {
subs.add(realm.objects('Turtle'));
},
},
onError: console.log,
}}>
<SubscriptionManager />
</RealmProvider>
</UserProvider>
</AppProvider>
);
}
function SubscriptionManager() {
// Pass object model to useQuery to get all objects of type `Turtle`.
// These results automatically update with changes from other devices
// because we created a subscription with `initialSubscriptions`.
const allTurtles = useQuery('Turtle');
return (
<FlatList
data={allTurtles}
keyExtractor={turtle => turtle._id.toString()}
renderItem={({item}) => <Text>{item._id}</Text>}
/>
);
}

De forma predeterminada, las suscripciones iniciales solo se crean la primera vez que se abre un dominio. Si su aplicación necesita volver a ejecutar esta suscripción inicial cada vez que se inicia, puede establecer rerunOnOpen en true. Podría ser necesario hacerlo para volver a ejecutar intervalos de tiempo dinámicos u otras consultas que requieran un nuevo cálculo de las variables estáticas de la suscripción.

Referencia de API

Puede comprobar el estado de la suscripción para ver si el servidor ha reconocido la suscripción y el dispositivo ha descargado los datos localmente.

Puede utilizar el estado de suscripción para:

  • Manejo de errores de activación

  • Mostrar si la transacción está pendiente o se ha completado

  • Descubre cuándo se reemplaza un conjunto de suscripciones y deberías obtener una nueva instancia del conjunto de suscripciones para guardar un cambio de suscripción.

import React, {useEffect} from 'react';
import {Text, View} from 'react-native';
import {useRealm, useQuery} from '@realm/react';
import {Bird} from '../Models/Bird';
function SubscriptionManager() {
const realm = useRealm();
const seenBirds = useQuery(Bird, birds => {
return birds.filtered('haveSeen == true');
});
useEffect(() => {
realm.subscriptions.update(
(mutableSubs: Realm.App.Sync.MutableSubscriptionSet) => {
// Create subscription for filtered collection.
mutableSubs.add(seenBirds, {name: 'seenBirds'});
},
);
});
// Returns state of all subscriptions, not individual subscriptions.
// In this case, it's just the subscription for `Bird` objects where
// `haveSeen` is true.
const allSubscriptionState = realm.subscriptions.state;
return (
<View>
<Text >
Status of all subscriptions: {allSubscriptionState}
</Text>
</View>
);
}

Novedades en la realm@12.0.0 versión.

Realm.js v12.0.0 agregó la enumeración SubscriptionSetState que puede usar para obtener el estado de una suscripción.

El estado "Completado" del conjunto de suscripción no significa que la sincronización esté completa ni que todos los documentos se hayan sincronizado. "Completado" significa que han ocurrido las dos cosas siguientes:

  • La suscripción se ha convertido en el conjunto de suscripciones activas que actualmente se está sincronizando con el servidor.

  • Los documentos que coincidían con la suscripción en el momento de enviarla al servidor se encuentran ahora en el dispositivo local. Tenga en cuenta que esto no incluye necesariamente todos los documentos que coinciden actualmente con la suscripción.

El SDK de Realm no proporciona una manera de verificar si todos los documentos que coinciden con una suscripción se han sincronizado con el dispositivo.

Puede actualizar una suscripción con nombre mediante una nueva consulta. Para actualizar la consulta de una suscripción, pase la nueva consulta y una opción de suscripción con el nombre de la suscripción que desea actualizar al método MutableSubscriptionSet.add(). Al igual que al añadir una nueva suscripción, debe actualizarla dentro de una transacción llamando a subscriptions.update().

El siguiente ejemplo redefine las tareas de larga ejecución como cualquier tarea que tome más de 180 minutos.

realm.subscriptions.update((mutableSubs) => {
mutableSubs.add(
tasks.filtered('status == "completed" && progressMinutes > 180'),
{
name: "longRunningTasksSubscription",
}
);
});

Nota

Intentar actualizar una suscripción que tiene el campo SubscriptionOptions.throwOnUpdate establecido como verdadero genera una excepción.

Referencia de API

Los conjuntos de suscripciones persisten entre sesiones, incluso si ya no se incluye la suscripción en el código. La información de la suscripción se almacena en el archivo de base de datos del dominio sincronizado. Debe eliminar explícitamente una suscripción para que deje de intentar sincronizar los datos coincidentes.

Puedes remover suscripciones de las siguientes formas:

  • Eliminar una sola suscripción con una consulta específica

  • Eliminar una sola suscripción con un nombre específico

  • Eliminar todas las suscripciones a un modelo de objeto específico

  • Remover todas las suscripciones sin nombre

  • Eliminar todas las suscripciones

Cuando elimina una consulta de suscripción, el servidor también elimina los datos sincronizados del dispositivo cliente.

Los ejemplos de esta sección suponen que está trabajando con @realm/react y un RealmProvider configurado correctamente.

import {useEffect} from 'react';
// get realm context from createRealmContext()
import {RealmContext} from '../RealmConfig';
const {useRealm} = RealmContext;
function SubscriptionManager() {
const realm = useRealm();
useEffect(() => {
realm.subscriptions.update(mutableSubs => {
// Remove subscription for object type `Turtle`,
// which we added in `initialSubscriptions`.
mutableSubs.removeByObjectType('Turtle');
});
});
return (
// ...
);
}

Puede eliminar una suscripción específica mediante una consulta ejecutando una transacción en el conjunto de suscripciones. Pase la consulta a MutableSubscriptionSet.remove() dentro de una transacción de escritura.

realm.subscriptions.update((mutableSubs) => {
// remove a subscription with a specific query
mutableSubs.remove(tasks.filtered('owner == "Ben"'));
});

Para eliminar una suscripción específica por nombre, ejecute una transacción en el conjunto de suscripciones. Dentro de la transacción, pase el nombre a MutableSubscriptionSet.removeByName().

realm.subscriptions.update((mutableSubs) => {
// remove a subscription with a specific name
mutableSubs.removeByName("longRunningTasksSubscription");
});

Si tiene una referencia a una suscripción, puede eliminarla. Para ello, ejecute una transacción en el conjunto de suscripciones. Dentro de la transacción, pase la variable de referencia a MutableSubscriptionSet.removeSubscription().

let subscriptionReference;
realm.subscriptions.update((mutableSubs) => {
subscriptionReference = mutableSubs.add(realm.objects("Task"));
});
// later..
realm.subscriptions.removeSubscription(subscriptionReference);

Para eliminar todas las suscripciones de un tipo de objeto específico, ejecute una transacción en el conjunto de suscripciones. Dentro de la transacción, pase el tipo de objeto como una cadena a MutableSubscriptionSet.removeByObjectType().

realm.subscriptions.update((mutableSubs) => {
mutableSubs.removeByObjectType("Team");
});

Novedades en la realm@v12.0.0 versión.

Es posible que desee eliminar las suscripciones sin nombre que son transitorias o generadas dinámicamente, pero dejar las suscripciones con nombre en su lugar.

Puede eliminar todas las suscripciones sin nombre del conjunto de suscripciones llamando a .removeUnnamed() en mutableSubs. .removeUnnamed() devuelve la cantidad de suscripciones sin nombre eliminadas.

// Remove unnamed subscriptions.
let numberRemovedSubscriptions = 0;
await realm.subscriptions.update((mutableSubs) => {
numberRemovedSubscriptions = mutableSubs.removeUnnamed();
});

Referencia de API

Para eliminar todas las suscripciones del conjunto, ejecute una transacción en dicho conjunto. Llame a MutableSubscriptionSet.removeAll() dentro de una transacción de escritura.

realm.subscriptions.update((mutableSubs) => {
mutableSubs.removeAll();
});

Administrar múltiples suscripciones con las subscribe() unsubscribe() API y descritas en la sección Suscribirse a consultas es menos eficiente que realizar actualizaciones por lotes cuando administra las suscripciones manualmente.

Para un mejor rendimiento al realizar varios cambios en las suscripciones, use la subscriptions API para actualizar todas las suscripciones en una sola transacción. Para saber cómo, consulte "Administrar suscripciones manualmente".

Cada transacción de escritura para un conjunto de suscripciones tiene un coste de rendimiento. Si necesita realizar varias actualizaciones a un objeto de Realm durante una sesión, considere mantener los objetos editados en memoria hasta que se completen todos los cambios. Esto mejora el rendimiento de la sincronización al escribir solo el objeto completo y actualizado en su reino, en lugar de cada cambio.

Añadir un campo consultable indexado a tu aplicación puede mejorar el rendimiento de consultas simples sobre datos con particiones estrictas. Por ejemplo, una aplicación donde las consultas asignan datos de forma estricta a un dispositivo, tienda o usuario,user_id == $0, “641374b03725038381d2e1fb” como, es una buena candidata para un campo consultable indexado. Sin embargo, un campo consultable indexado tiene requisitos específicos para su uso en una suscripción de consultas:

  • El campo consultable indexado debe usarse en todas las consultas de suscripción. No puede faltar en la consulta.

  • El campo consultable indexado debe usar una comparación == o IN con una constante al menos una vez en la consulta de suscripción. Por ejemplo, user_id == $0, "641374b03725038381d2e1fb" o store_id IN $0, {1,2,3}.

Opcionalmente, puede incluir una comparación AND siempre que el campo consultable indexado se compare directamente con una constante usando == o IN al menos una vez. Por ejemplo, store_id IN {1,2,3} AND region=="Northeast" o store_id == 1 AND (active_promotions < 5 OR num_employees < 10).

Las consultas de sincronización flexibleno válidas en un campo consultable indexado incluyen consultas donde:

  • El campo consultable indexado no usa AND con el resto de la consulta. Por ejemplo, store_id IN {1,2,3} OR region=="Northeast" no es válido porque usa OR en lugar de AND. De igual manera, store_id == 1 AND active_promotions < 5 OR num_employees < 10 no es válido porque AND solo se aplica al término contiguo, no a toda la consulta.

  • El campo consultable indexado no se utiliza en un operador de igualdad. Por ejemplo, store_id > 2 AND region=="Northeast" no es válido porque solo utiliza el operador > con el campo consultable indexado y no tiene una comparación de igualdad.

  • A la consulta le falta por completo el campo consultable indexado. Por ejemplo, region=="Northeast o truepredicate no son válidos porque no contienen dicho campo.

La sincronización flexible presenta algunas limitaciones al usar operadores RQL. Al escribir la suscripción de consulta que determina qué datos sincronizar, el servidor no admite estos operadores. Sin embargo, aún puede usar todas las funciones de RQL para consultar el conjunto de datos sincronizados en la aplicación cliente.

Tipo de operador
Operadores no compatibles

Operadores agregados

@avg, @count, @max, @min, @sum

Sufijos de consulta

DISTINCT, SORT, LIMIT

Las consultas que no distinguen entre mayúsculas y minúsculas ([c]) no pueden usar índices eficazmente. Por lo tanto, no se recomiendan, ya que podrían causar problemas de rendimiento.

Flexible Sync solo admite @count para campos de matriz.

Flexible Sync admite la consulta de listas mediante el operador IN.

Puede consultar una lista de constantes para ver si contiene el valor de un campo consultable:

// Query a constant list for a queryable field value
"priority IN { 1, 2, 3 }"

Si un campo consultable tiene un valor de matriz, puedes consultar para ver si contiene un valor constante:

// Query an array-valued queryable field for a constant value
"'comedy' IN genres"

Advertencia

No se pueden comparar dos listas en una consulta de sincronización flexible. Tenga en cuenta que esta sintaxis del lenguaje de consulta de dominio es válida fuera de las consultas de sincronización flexible.

// Invalid Flexible Sync query. Do not do this!
"{'comedy', 'horror', 'suspense'} IN genres"
// Another invalid Flexible Sync query. Do not do this!
"ANY {'comedy', 'horror', 'suspense'} != ANY genres"

La sincronización flexible no admite consultas sobre propiedades en objetos incrustados ni enlaces. Por ejemplo, obj1.field == "foo".

El límite de tamaño para cualquier suscripción de consulta en su conjunto de suscripciones es de kB. Superar este límite genera 256 un error "LimitsExceeded".

Volver

Configurar un reino sincronizado