Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Filtrar dados - C++ SDK

Nesta página

  • Sobre os exemplos nesta página
  • Filtre dados
  • Operadores de comparação
  • Operadores lógicos
  • Operadores de strings

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.

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

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

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

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

Voltar

Excluir

Próximo

Segmentação