Docs Menu
Docs Home
/ /
CRUD

Consulta de datos - SDK de React Native

Puedes consultar un dominio para encontrar objetos según su tipo y los valores de sus propiedades. Los objetos y las consultas siempre reflejan el estado más reciente de un objeto y emiten notificaciones que actualizan tu aplicación cuando cambian los datos.

Para filtrar datos en sus dominios, cree consultas con el lenguaje de consulta de dominios. Para obtener más información sobre la sintaxis, el uso y las limitaciones, consulte la referencia del lenguaje de consulta de dominios.

Una colección de resultados representa todos los objetos de un dominio que coinciden con una consulta. En general, se puede trabajar con una colección como si fuera un array de JavaScript normal, pero las colecciones no almacenan en memoria los objetos coincidentes del dominio. En su lugar, hacen referencia a los objetos coincidentes, que a su vez se asignan directamente a los datos del archivo del dominio.

Nota

Paginación y límites

Algunas consultas solo necesitan acceder a un subconjunto de todos los objetos que coinciden con la consulta. Las colecciones de carga diferida de Realm solo recuperan objetos cuando se accede a ellos, por lo que no se necesita ningún mecanismo especial para limitar los resultados de la consulta.

Por ejemplo, si solo desea encontrar 10 objetos coincidentes a la vez (como en un catálogo de productos paginado), puede acceder a diez elementos de la colección de resultados. Para avanzar a la página siguiente, acceda a los siguientes diez elementos de la colección de resultados, comenzando por el índice inmediatamente posterior al último elemento de la página anterior.

Los ejemplos de esta página utilizan un conjunto de datos simple para una aplicación de lista de tareas. Los dos tipos de objetos Realm son Project y Task. Un Task tiene un nombre, el nombre del asignado y una marca de finalización. También hay un número arbitrario para la prioridad (cuanto más alto, más importante) y un recuento de minutos dedicados a trabajar en él. Un Project tiene cero o más Tasks.

Vea el esquema de estas dos clases, Project y Task:

const TaskSchema = {
name: "Task",
properties: {
name: "string",
isComplete: "bool",
priority: "int",
progressMinutes: "int",
assignee: "string?"
}
};
const ProjectSchema = {
name: "Project",
properties: {
name: "string",
tasks: "Task[]"
}
};

Para filtrar datos, pase una consulta realizada con Realm Query Language a Resultados del reino filtrados ()

const items = realm.objects("Item");
// Gets all items where the 'priority' property is 7 or more.
const importantItems = items.filtered("priority >= $0", 7);

Puede usar el Lenguaje de Consulta de Dominio (RQL) para consultar propiedades con un índice de Búsqueda de Texto Completo (FTS). Para comenzar, use useQuery() para obtener la colección de objetos de dominio que desea filtrar. Para consultar la propiedad indexada FTS para encontrar objetos dentro de la colección, use el TEXT predicado en su consulta filtrada.

Excluya los resultados de una palabra colocando el carácter - delante de ella. Por ejemplo, una búsqueda de swan -lake incluiría todos los resultados de búsqueda de swan, excepto los que contengan lake.

En el siguiente ejemplo, consultamos el campo Book.name utilizando el siguiente modelo de objeto Book:

class Book extends Realm.Object<Book> {
name!: string;
price?: number;
static schema: ObjectSchema = {
name: 'Book',
properties: {
name: {type: 'string', indexed: 'full-text'},
price: 'int?',
},
};
}
import {useQuery} from "@realm/react";
// Retrieve book objects from realm
const books = useQuery(Book);
// Filter for books with 'hunger' in the name
const booksWithHunger = useQuery(Book, books => {
return books.filtered('name TEXT $0', 'hunger');
});
// Filter for books with 'swan' but not 'lake' in the name
const booksWithSwanWithoutLake = useQuery(Book, books => {
return books.filtered('name TEXT $0', 'swan -lake');
});

Los índices de búsqueda de texto completo (FTS) admiten:

  • Búsquedas de palabras con coincidencias booleanas, no búsquedas de relevancia.

  • Los tokens no distinguen entre mayúsculas y minúsculas ni entre signos diacríticos.

  • Los tokens solo pueden constar de caracteres ASCII y del suplemento latino1 (idiomas occidentales).

  • Todos los demás caracteres se consideran espacios en blanco. Las palabras separadas por un guion (-), como el texto completo, se dividen en dos tokens.

Existen varios tipos de operadores disponibles para filtrar una colección de Realm. Los filtros funcionan evaluando una expresión de operador para cada objeto de la colección que se filtra. Si la expresión se resuelve true como, Realm Database incluye el objeto en la colección de resultados.

Una expresión consta de uno de los siguientes:

  • El nombre de una propiedad del objeto que se está evaluando actualmente.

  • Un operador y hasta dos expresiones de argumentos.

  • Una cadena literal, un número o una fecha.

La operación más sencilla en una búsqueda es comparar valores. El lenguaje de consulta Realm tiene operadores de comparación estándar como ==, >, >=, in, <, <= y !=.

Para obtener documentación completa sobre los operadores de comparación, consulta la referencia de operadores de comparación del Realm Query Language.

El siguiente ejemplo utiliza los operadores de comparación del motor de consulta para:

  • Encuentre tareas de alta prioridad comparando el valor de la propiedad priority con un número umbral, por encima del cual la prioridad puede considerarse alta.

  • Encuentre tareas recién iniciadas o de corta duración observando si la propiedad progressMinutes se encuentra dentro de un rango determinado.

  • Encuentre tareas no asignadas buscando tareas donde la propiedad assignee sea igual a null.

  • Encuentre tareas asignadas a compañeros de equipo específicos, Ali o Jamie, viendo si la propiedad assignee está en una lista de nombres.

const highPriorityTasks = tasks.filtered("priority > $0", 5);
const unassignedTasks = tasks.filtered("assignee == $0", null);
const lowProgressTasks = tasks.filtered("$0 <= progressMinutes && progressMinutes < $1", 1, 10);
const aliTasks = tasks.filtered("assignee == $0", "Ali");
console.log(
`Number of high priority tasks: ${highPriorityTasks.length}`,
`Number of unassigned tasks: ${unassignedTasks.length}`,
`Number of just-started or short-running tasks: ${lowProgressTasks.length}`,
`Number of tasks for Ali: ${aliTasks.length}`
);

Cree predicados compuestos mediante operadores lógicos. El lenguaje de consulta Realm tiene operadores lógicos estándar como AND, OR y NOT.

Para obtener documentación completa sobre los operadores lógicos, consulte la referencia de operadores lógicos de Realm Query Language.

El siguiente ejemplo utiliza los operadores lógicos del lenguaje de consulta Realm para encontrar todas las tareas completadas de Ali. Se buscan todas las tareas donde el valor de la propiedad assignee es igual a 'Ali' y el valor de la propiedad isComplete es true.

console.log(
"Number of Ali's complete tasks: " +
tasks.filtered("assignee == $0 && isComplete == $1", "Ali", true).length
);

Puedes comparar valores de cadena usando operadores como ==, beginsWith, contains y endsWith. También puedes usar el operador LIKE para buscar con comodines similares a expresiones regulares.

Para obtener documentación completa sobre los operadores de cadena, consulte la referencia de operadores de cadena de Realm Query Language.

El siguiente ejemplo utiliza los operadores de cadena de Realm Query Language para encontrar proyectos con un nombre que comience con la letra "e" y proyectos con nombres que contengan "ie".

// Use [c] for case-insensitivity.
console.log(
"Projects that start with 'e': " +
projects.filtered("name BEGINSWITH[c] $0", 'e').length
);
console.log(
"Projects that contain 'ie': " +
projects.filtered("name CONTAINS $0", 'ie').length
);

Recorrer una colección y reducirla a un único valor con un operador agregado.

Para obtener documentación completa sobre los operadores agregados, consulte la referencia de operadores agregados de Realm Query Language.

Los siguientes ejemplos utilizan operadores agregados para mostrar diferentes facetas de los datos:

  • @avg para mostrar proyectos con prioridad promedio de tareas superior a 5.

  • @sum para mostrar proyectos de larga duración.

console.log(
"Number of projects with average tasks priority above 5: " +
projects.filtered("tasks.@avg.priority > $0", 5).length
);
console.log(
"Number of long-running projects: " +
projects.filtered("tasks.@sum.progressMinutes > $0", 120).length
);

Un operador de colección utiliza reglas para determinar si se debe pasar cada objeto de colección de entrada a la colección de salida aplicando un predicado determinado a cada elemento de una propiedad de lista determinada del objeto.

Para la documentación completa sobre operadores de recolección, consulta la referencia de operadores de colección de Realm Query Language.

Los siguientes ejemplos utilizan los operadores de colección de Realm Query Language para buscar:

  • ALL para proyectos sin tareas completadas.

  • ANY para proyectos con tareas de máxima prioridad.

console.log(
"Number of projects with no complete tasks: " +
projects.filtered("ALL tasks.isComplete == $0", false).length
);
console.log(
"Number of projects with any top priority tasks: " +
projects.filtered("ANY tasks.priority == $0", 10).length
);

Volver

Borrar

En esta página