Filtrar dados - C++ SDK
Nesta página
Para filtrar dados em seu domínio, você pode aproveitar o mecanismo de query do Realm. Você também pode classificar dados filtrados. Para obter um exemplo de como classificar os resultados da query, consulte Listas de classificação e resultados da query.
Observação
O C++ SDK ainda não oferece suporte a toda a gama de expressão query que os outros SDKs fornecem.
Sobre os exemplos nesta página
Os exemplos nesta página usam um conjunto de dados simples para um aplicativo de lista de tarefas. Os dois Tipo de objeto de Realm são Project
e Item
. Um Item
tem:
Um nome
Um sinalizador finalizado
O nome de um responsável opcional
Um número representando a prioridade, onde maior é mais importante
Um número de minutos gastos trabalhando nele
Um Project
tem um nome e um relacionamento para-muitos para zero ou mais Items
.
Os esquemas para Project
e Item
são:
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)
Você pode configurar o domínio para estes exemplos com o seguinte 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>();
Filtre dados
Operadores de comparação
Comparações de valor
Operador | Descrição |
---|---|
== | Avalia para true se a expressão do lado esquerdo é igual à expressão do lado direito. |
> | Avalia como true se a expressão numérica ou de data do lado esquerdo é maior que a expressão numérica ou de data do lado direito. Com datas, avalia como true se a data do lado esquerdo é posterior à data do lado direito. |
>= | Avalia como true se a expressão numérica ou de data do lado esquerdo é maior ou igual à expressão numérica ou de data do lado direito. Com datas, avalia como true se a data do lado esquerdo é posterior ou igual à data do lado direito. |
< | Avalia como true se a expressão numérica ou de data do lado esquerdo é menor que a expressão numérica ou de data do lado direito. Com datas, avalia como true se a data do lado esquerdo é anterior à data do lado direito. |
<= | Avalia como true se a expressão numérica à esquerda for menor ou igual à expressão numérica à direita. Com datas, avalia como true se a data do lado esquerdo é anterior ou igual à data do lado direito. |
!= | Avalia como true se a expressão do lado esquerdo não é igual à expressão do lado direito. |
Exemplo
O exemplo a seguir usa operadores de comparação do mecanismo de consulta para:
Encontre tarefas de alta prioridade comparando o valor da propriedade
priority
com um número limite, acima do qual a prioridade pode ser considerada alta.Encontre tarefas recém-iniciadas ou de curta duração verificando se a propriedade
progressMinutes
está dentro de um determinado intervalo.Encontre tarefas não atribuídas encontrando tarefas onde a propriedade
assignee
é igual astd::nullopt
.Encontre tarefas atribuídas a membros específicos da equipe Ali ou Jamie verificando se a propriedade
assignee
está em uma lista de nomes.
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
Você pode usar os operadores lógicos listados na tabela a seguir para fazer predicados compostos:
Operador | Descrição |
---|---|
&& | Avalia para true se as expressões da esquerda e da direita forem true . |
! | Nega o resultado da expressão fornecida. |
|| | Avalia como true se qualquer uma das expressões retornar true . |
Exemplo
Podemos usar os operadores lógicos da linguagem de consulta para encontrar todas as tarefas concluídas de Ali. Ou seja, encontramos todas as tarefas em que o valor da propriedade assignee
é igual a "Ali" E o valor da propriedade isComplete
é true
:
auto completedItemsForAli = items.where([](auto const& item) { return item.assignee == std::string("Ali") && item.isComplete == true; });
Operadores de strings
Você pode comparar valores de string utilizando esses operadores de string.
Operador | Descrição |
---|---|
.contains(_ value: String) | Avaliado como true se a expressão de string à esquerda for encontrada em qualquer lugar na expressão de string à direita. |
== | Avalia como true se a string esquerda for lexicograficamente igual à string direita. |
!= | Avalia para true se a string esquerda não for lexicograficamente igual à string direita. |
Exemplo
O exemplo a seguir utiliza os operadores de string do mecanismo de query para localizar:
Projetos com nomes que contêm "ou"
auto containIe = items.where([](auto const& item) { return item.name.contains("ie"); });