Dados de query - React Native SDK
Nesta página
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.
Coleções de resultados
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.
Exemplos nesta página
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[]" } };
Construir uma query
Para filtrar dados, faça uma query feita com RQL para 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);
Filtrar com pesquisa por texto completo
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'); });
Full Text Search Tokenizer Details
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.
Operadores
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.
Operadores de comparação
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 anull
.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}` );
Operadores lógicos
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 );
Operadores de strings
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 );
Operadores agregados
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 );
Operadores de collections
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 );
Resumo
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