Docs Menu
Docs Home
/ /
CRUD - SDK de C++

Filtrar datos - SDK de C++

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.

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>();

Comparaciones de valores

Operador
Descripción
==

Se evalúa como true si la expresión de la izquierda es igual a la expresión de la derecha.

>

Se evalúa como true si la expresión numérica o de fecha de la izquierda es mayor que la de la derecha. Para las fechas, se evalúa como true si la fecha de la izquierda es posterior a la de la derecha.

>=

Se evalúa como true si la expresión numérica o de fecha de la izquierda es mayor o igual que la expresión numérica o de fecha de la derecha. Para las fechas, se evalúa como true si la fecha de la izquierda es posterior o igual a la de la derecha.

<

Se evalúa como true si la expresión numérica o de fecha de la izquierda es menor que la de la derecha. Para las fechas, se evalúa como true si la fecha de la izquierda es anterior a la de la derecha.

<=

Se evalúa como true si la expresión numérica de la izquierda es menor o igual que la de la derecha. Para las fechas, se evalúa como true si la fecha de la izquierda es anterior o igual a la de la derecha.

!=

Se evalúa como true si la expresión de la izquierda no es igual a la expresión de la derecha.

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 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 std::nullopt.

  • Encuentre tareas asignadas a compañeros de equipo específicos, Ali o Jamie, viendo si la propiedad assignee está 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");
});

Puede utilizar los operadores lógicos enumerados en la siguiente tabla para crear predicados compuestos:

Operador
Descripción
&&

Se evalúa como true si las expresiones de la izquierda y la derecha son true.

!

Niega el resultado de la expresión dada.

||

Se evalúa como true si alguna expresión devuelve true.

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;
});

Puede comparar valores de cadena utilizando estos operadores de cadena.

Operador
Descripción
.contains(_ value: String)

Evalúa como true si la expresión de string a la izquierda se encuentra en cualquier parte de la expresión de string a la derecha.

==

Se evalúa como true si la cadena de la izquierda es lexicográficamente igual a la cadena de la derecha.

!=

Se evalúa como true si la cadena de la izquierda no es lexicográficamente igual a la cadena de la derecha.

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"); });

Volver

Borrar

En esta página