Novidades na versão 10.5.0.
Visão geral
Você pode usar o dictionary tipo de dados para gerenciar uma coleção de chaves de string únicas emparelhadas com valores. Os dictionary dados mapeiam para o tipo deobjeto do Javascript.
Realm Object Models
Para definir um dicionário de valores mistos em seu esquema, configure o tipo de dados do seu campo para um objeto vazio, "{}". Alternativamente, para criar um dicionário com valores de um tipo específico, adicione o tipo de dados antes dos colchetes. Por exemplo, "int{}" para especificar que os valores do dicionário devem ser inteiros ou "string{}" para especificar que os valores do dicionário devem ser strings.
const PersonSchema = { name: "Person", properties: { name: "string", home: "{}", }, };
O Realm não permite o uso de . ou $ caracteres em chaves de mapa. Você pode usar a codificação e a decodificação percentual para armazenar uma chave de mapa que contenha um desses caracteres não permitidos.
// Percent encode . or $ characters to use them in map keys const mapKey = "kitchen.windows"; const encodedMapKey = mapKey.replace(".", "%2E");
Criar um objeto com um valor de dicionário
Crie um objeto com um valor de dicionário executando o método realm.create() dentro de uma transação de gravação.
let johnDoe; let janeSmith; realm.write(() => { johnDoe = realm.create("Person", { name: "John Doe", home: { windows: 5, doors: 3, color: "red", address: "Summerhill St.", price: 400123, }, }); janeSmith = realm.create("Person", { name: "Jane Smith", home: { address: "100 northroad st.", yearBuilt: 1990, }, }); });
Consulta para objetos com propriedade de dicionário
Para filtrar uma query, execute collection.filtered() para especificar um subconjunto de resultados com base no(s) valor(es) de uma ou mais propriedades de objeto. Você pode especificar resultados com base no valor das propriedades de um dicionário usando a notação entre colchetes.
Você também pode determinar se uma coleção de resultados tem uma determinada chave ou valor utilizando <dictionary>.@keys ou <dictionary>.@values. Por exemplo, se você tivesse uma coleção Person com um dicionário home aninhado, poderia retornar todos os objetos Person com home com uma propriedade "price" executando a consulta: home.@keys = "price".
// query for all Person objects const persons = realm.objects("Person"); // run the `.filtered()` method on all the returned persons to // find the house with the address "Summerhill St." const summerHillHouse = persons.filtered( `home['address'] = "Summerhill St."` )[0].home; // Find all people that have a house with a listed price const peopleWithHousesWithAListedPrice = persons.filtered( `home.@keys = "price" ` ); // find a house that has any field with a value of 'red' const redHouse = persons.filtered(`home.@values = "red" `)[0].home;
Adicionar um Listener a um Dicionário
Você pode adicionar um ouvinte a um dicionário executando o arquivo dictionary.addListener() método. A função de retorno de chamada do método addListener tem dois parâmetros, o dicionário alterado e uma array de alterações descrevendo como o dicionário foi alterado.
Observação
Saiba mais sobre notificações de alteração.
summerHillHouse.addListener((changedHouse, changes) => { console.log("A change has occurred to the Summer Hill House object"); });
Atualizar um dicionário
Para atualizar as propriedades de um dicionário, utilize notação de ponto ou o método dictionary.put().
realm.write(() => { // use the `set()` method to update a field of a dictionary summerHillHouse.set({ price: 400100 }); // alternatively, update a field of a dictionary through dot notation summerHillHouse.color = "brown"; // update a dictionary by adding a field summerHillHouse.yearBuilt = 2004; });
Excluir membros de um dicionário
Para excluir membros de um dicionário, use o método dictionary.remove() com uma array de propriedades a serem removidas do dicionário.
realm.write(() => { // remove the 'windows' and 'doors' field of the Summerhill House. summerHillHouse.remove(["windows", "doors"]); });