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

Dados de query - React Native SDK

Nesta página

  • Coleções de resultados
  • Exemplos nesta página
  • Construir uma query
  • Filtrar com pesquisa por texto completo
  • Operadores
  • Operadores de comparação
  • Operadores lógicos
  • Operadores de strings
  • Operadores agregados
  • Operadores de collections
  • Resumo

Você pode fazer uma query em um domínio para encontrar objetos com base em seu tipo e nos valores de suas propriedades. Os objetos e as queries sempre refletem o estado mais recente de um objeto e emitem notificações que podem atualizar seu aplicativo sempre que os dados mudarem.

Para filtrar dados em seus domínios, crie queries com a Realm Query Language. Para obter mais informações sobre sintaxe, uso e limitações, consulte a referência da Realm Query Language.

Uma coleção de resultados representa todos os objetos em um domínio que correspondem a uma operação de query. Em geral, você pode trabalhar com uma coleção como uma matriz JavaScript normal, mas as coleçãos não mantêm objetos Realm correspondentes na memória. Em vez disso, eles fazem referência aos objetos correspondentes, que, por sua vez, são mapeados diretamente para os dados no arquivo de domínio.

Observação

Paginação & limites

Algumas queries só precisam acessar um subconjunto de todos os objetos que correspondem à querie. As lazy-loaded coleçãos do domínio só fetch objetos quando você domínioente os access, então você não precisa de nenhum mecanismo especial para limitar os query results.

Por exemplo, se quiser encontrar apenas 10 objetos correspondentes de cada vez (como em um catálogo de produtos paginado), basta acessar dez elementos da coleção de resultados. Para avançar para a próxima página, acesse os próximos dez elementos da coleção de resultados, começando no índice imediatamente após o último elemento da página anterior.

Os exemplos nesta página usam um conjunto de dados simples para uma aplicação de lista de tarefas. Os dois tipos de objetos do Realm são Project e Task. Uma Task tem um nome, o nome do responsável e um sinalizador finalizado. Há também um número arbitrário de prioridade (o maior é mais importante) e o número de minutos gastos trabalhando nisso. Um Project tem zero ou mais Tasks.

Consulte o esquema para estas duas classes, Project e 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[]"
}
};

To filter data, pass a query made with Realm Query Language to Realm.Results.filtered()

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

Você pode usar a Realm Query Language (RQL) para fazer uma query em propriedades que têm um índice Full-Text Search (FTS). Para começar, use useQuery() para retornar a coleção de objetos de realm que você deseja filtrar. Para fazer uma query na propriedade indexada FTS para objetos dentro da coleção, use o predicado TEXT em sua query filtrada.

Exclua os resultados de uma palavra colocando o caractere - na frente da palavra. Por exemplo, uma pesquisa para swan -lake incluiria todos os resultados da pesquisa para swan excluindo aqueles com lake.

No exemplo seguinte, fazemos uma query no campo Book.name utilizando o seguinte 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');
});

Suporte a índices de pesquisa de texto completo (FTS):

  • Pesquisas de palavras correspondentes booleanas, não pesquisas por relevância.

  • Os tokens são diacríticos e não fazem distinção entre maiúsculas e minúsculas.

  • Os tokens só podem consistir em caracteres do ASCII e do suplemento Latin-1 (idiomas ocidentais).

  • Todos os outros caracteres são considerados espaços em branco. Palavras divididas por um hífen (-) como texto completo são divididas em dois tokens.

Há vários tipos de operadores disponíveis para filtrar uma collection do Realm. Os filtros funcionam avaliando uma expressão de operador para cada objeto na collection que está sendo filtrada. Se a expressão resolver para true, o banco de dados do Realm incluirá o objeto na collection de resultados.

Uma expressão consiste em um dos seguintes:

  • O nome de uma propriedade do objeto que está sendo avaliados.

  • Um operador e até duas expressões de argumentos.

  • Uma string literal, número ou data.

A operação mais direta em uma pesquisa é comparar valores. A Realm Query Language tem operadores de comparação padrão como ==, >, >=, in, <, <= e !=.

Para obter a documentação completa sobre operadores de comparação, consulte a referência do operador de comparação da Realm Query Language.

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 null.

  • Encontre tarefas atribuídas a membros específicos da equipe Ali ou Jamie verificando se a propriedade assignee está em uma lista de nomes.

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

Crie predicados compostos usando operadores lógicos. A Realm Query Language tem operadores lógicos padrão, como AND, OR e NOT.

Para obter a documentação completa sobre operadores lógicos, consulte a referência do operador lógico Realm Query Language.

O exemplo a seguir usa os operadores lógicos da Realm Query Language para localizar todas as tarefas concluídas do Alie. Encontramos todas as tarefas em que o valor da propriedade assignee é igual a "Ali" E o valor da propriedade isComplete é true.

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

Você pode comparar valores de string utilizando operadores de string como ==, beginsWith, contains e endsWith. Você também pode usar o operador LIKE para pesquisar com curingas semelhantes a regex.

Para obter a documentação completa sobre operadores de string, consulte a referência do operador de string da Realm Query Language.

O exemplo a seguir usa os operadores de string da Realm Query Language para localizar projetos com um nome começando com a letra "e" e projetos com nomes que contêm "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
);

Percorra uma coleção e reduza-a a um único valor com um operador agregado.

Para obter a documentação completa sobre operadores agregados, consulte a referência do operador agregado da Realm Query Language.

Os exemplos a seguir usam operadores agregados para mostrar diferentes facetas dos dados:

  • @avg para mostrar projetos com prioridade média de tarefas acima de 5.

  • @sum para mostrar projetos de longa duração.

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

Um operador de coleção usa regras para determinar se deve passar cada objeto de coleção de entrada para a coleção de saída aplicando um determinado predicado a cada elemento de uma determinada propriedade de lista do objeto.

Para obter a documentação completa sobre os operadores de collection, consulte a referência de operador de collection da Realm Query Language.

Os exemplos a seguir usam operadores de collection da Realm Query Language para encontrar:

  • ALL para projetos sem tarefas concluídas.

  • ANY para projetos com quaisquer tarefas de alta prioridade.

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
);
  • Use Realm.Results.filtered para filtrar dados em seu Realm usando a Realm Query Language.

  • Para obter uma explicação detalhada da Realm Query Language, consulte a referência da Realm Query Language.

  • Existem várias categorias de operadores disponíveis para filtrar resultados: - comparação - lógica - string - agregado - conjunto

Voltar

Excluir

Próximo

Reagir às alterações