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.
Requisitos previos
Debe cumplir los siguientes requisitos antes de poder usar Atlas Device Sync con el SDK de React Native:
Un clúster de Atlas no particionado ejecutando MongoDB 5.0 o superior.
Realm.js versión 680010.12.0 o posterior.
Antes de poder agregar suscripciones de sincronización flexible a un cliente React Native, debes:
Alinear suscripciones con la aplicación backend
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.
Suscribirse a Consultas
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.
Suscribirse a una consulta
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:
Consulta los objetos que quieres leer y escribir.
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.Pase un objeto
SubscriptionOptionsque contenga la propiedadnameasubscribe().
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
Espere a que se sincronice una suscripción de consulta
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
Darse de baja de una consulta
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
Gestionar suscripciones manualmente
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.
Acceder a todas las suscripciones
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
Añadir una suscripción
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>} /> ); }
Configurar un reino con suscripciones iniciales
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
Comprueba el estado de las suscripciones
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.
Estado de suscripción "Completado"
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.
Actualizar suscripciones con una nueva consulta
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
Eliminar suscripciones
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 ( // ... ); }
Eliminar una suscripción mediante consulta
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"')); });
Eliminar una suscripción por nombre
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"); });
Eliminar una suscripción por referencia
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);
Eliminar todas las suscripciones de un tipo de objeto
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"); });
Eliminar todas las suscripciones sin nombre
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
Eliminar todas las suscripciones
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(); });
Consideraciones sobre el rendimiento
Eficiencia de la API
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".
Actualizaciones de grupo para un mejor rendimiento
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.
Requisitos y limitaciones de RQL de sincronización flexible
Requisitos de suscripción a campos consultables indexados
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
==oINcon una constante al menos una vez en la consulta de suscripción. Por ejemplo,user_id == $0, "641374b03725038381d2e1fb"ostore_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
ANDcon el resto de la consulta. Por ejemplo,store_id IN {1,2,3} OR region=="Northeast"no es válido porque usaORen lugar deAND. De igual manera,store_id == 1 AND active_promotions < 5 OR num_employees < 10no es válido porqueANDsolo 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=="Northeastotruepredicateno son válidos porque no contienen dicho campo.
Operadores de consulta no admitidos en Flexible Sync
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 |
|
Sufijos de consulta |
|
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.
Consultas de lista
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"
Objetos incrustados o vinculados
La sincronización flexible no admite consultas sobre propiedades en objetos incrustados ni enlaces. Por ejemplo, obj1.field == "foo".
Límite de tamaño de consulta
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".