Para filtrar datos en tu dominio, puedes usar el motor de consultas de Realm. También puedes ordenar los datos filtrados. Para ver un ejemplo de cómo ordenar los resultados de una consulta,consulta "Ordenar listas y resultados de consultas".
Nota
El SDK de C++ aún no admite la gama completa de expresiones de consulta que proporcionan otros SDK.
Acerca de los ejemplos de esta página
Los ejemplos de esta página utilizan un conjunto de datos simple para una aplicación de lista de tareas pendientes. Los dos tipos de objetos Realm son Project
y Item. Un Item tiene:
Un nombre
Una bandera terminada
Nombre de un cesionario opcional
Un número que representa la prioridad, donde cuanto más alto, más importante es.
Un recuento de minutos dedicados a trabajar en ello.
Un Project tiene un nombre y una relación de muchos con cero o más Items.
Los esquemas para Project y Item son:
struct Item { std::string name; bool isComplete; std::optional<std::string> assignee; int64_t priority; int64_t progressMinutes; }; REALM_SCHEMA(Item, name, isComplete, assignee, priority, progressMinutes) struct Project { std::string name; std::vector<Item*> items; }; REALM_SCHEMA(Project, name, items)
Puede configurar el reino para estos ejemplos con el siguiente código:
auto config = realm::db_config(); auto realm = realm::db(std::move(config)); auto item1 = realm::Item{.name = "Save the cheerleader", .assignee = std::string("Peter"), .isComplete = false, .priority = 6, .progressMinutes = 30}; auto project = realm::Project{.name = "New project"}; project.items.push_back(&item1); realm.write([&] { realm.add(std::move(project)); }); auto items = realm.objects<realm::Item>(); auto projects = realm.objects<realm::Project>();
Filtro de datos
Operadores de comparación
Comparaciones de valores
Operador | Descripción |
|---|---|
== | Se evalúa como |
> | Se evalúa como |
>= | Se evalúa como |
< | Se evalúa como |
<= | Se evalúa como |
!= | Se evalúa como |
Ejemplo
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
prioritycon 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
progressMinutesse encuentra dentro de un rango determinado.Encuentre tareas no asignadas buscando tareas donde la propiedad
assigneesea igual astd::nullopt.Encuentre tareas asignadas a compañeros de equipo específicos, Ali o Jamie, viendo si la propiedad
assigneeestá en una lista de nombres.
auto highPriorityItems = items.where([](auto const& item) { return item.priority > 5; }); auto quickItems = items.where([](auto const& item) { return item.progressMinutes > 1 && item.progressMinutes < 30; }); auto unassignedItems = items.where( [](auto const& item) { return item.assignee == std::nullopt; }); auto aliOrJamieItems = items.where([](auto const& item) { return item.assignee == std::string("Ali") || item.assignee == std::string("Jamie"); });
Operadores lógicos
Puede utilizar los operadores lógicos enumerados en la siguiente tabla para crear predicados compuestos:
Operador | Descripción |
|---|---|
&& | Se evalúa como |
! | Niega el resultado de la expresión dada. |
|| | Se evalúa como |
Ejemplo
Podemos usar los operadores lógicos del lenguaje de consulta para encontrar todas las tareas completadas de Ali. Es decir, buscamos todas las tareas donde el valor de la propiedad assignee es igual a 'Ali' y el valor de la propiedad isComplete es true:
auto completedItemsForAli = items.where([](auto const& item) { return item.assignee == std::string("Ali") && item.isComplete == true; });
Operadores de String
Puede comparar valores de cadena utilizando estos operadores de cadena.
Operador | Descripción |
|---|---|
.contains(_ value: String) | Evalúa como |
== | Se evalúa como |
!= | Se evalúa como |
Ejemplo
El siguiente ejemplo utiliza los operadores de cadena del motor de consulta para buscar:
Proyectos con nombres que contienen 'ie'
auto containIe = items.where([](auto const& item) { return item.name.contains("ie"); });