React Native
...
Data objects
Join Queries
8 min
consulta de junção usando parse introdução neste guia, você realizará consultas relacionais no parse imitando o comportamento das consultas sql join usando um banco de dados nosql pré requisitos para completar este tutorial, você precisará um app criado no back4app objetivo consultar dados relacionais armazenados no back4app de forma semelhante a uma consulta sql join 1 compreendendo a classe parse query qualquer operação de consulta parse usa o parse query parse query tipo de objeto, que ajudará você a recuperar dados específicos do seu banco de dados em todo o seu aplicativo é crucial saber que um parse query parse query só será resolvido após chamar um método de recuperação (como parse query find parse query find ou parse query get parse query get ), então uma consulta pode ser configurada e vários modificadores podem ser encadeados antes de realmente serem chamados para criar um novo parse query parse query , você precisa passar como parâmetro a parse object parse object desejada, que é a que conterá os resultados da sua consulta um exemplo de consulta pode ser visto abaixo, na qual uma profile profile fictícia está sendo consultada 1 // this will create your query 2 let parsequery = new parse query("profile"); 3 // the query will resolve only after calling this method 4 let queryresult = await parsequery find(); você pode ler mais sobre a parse query parse query classe aqui na documentação oficial https //parseplatform org/parse sdk js/api/master/parse query html 2 salvar alguns dados no back4app vamos criar duas classes de exemplo, tablea tablea e tableb tableb , que serão os alvos de nossas consultas neste guia no console js do parse, é possível executar código javascript diretamente, consultando e atualizando o conteúdo do banco de dados da sua aplicação usando os comandos do sdk js execute o código abaixo a partir do seu console js e insira os dados no back4app aqui está como o console js se parece no seu painel vá em frente e crie as classes com o seguinte conteúdo 1 // create tablea and its records 2 let tablearecord1 = new parse object('tablea'); 3 tablearecord1 set('fielda', 'value a 1'); 4 tablearecord1 = await tablearecord1 save(); 5	 6 let tablearecord2 = new parse object('tablea'); 7 tablearecord2 set('fielda', 'value a 2'); 8 tablearecord2 = await tablearecord2 save(); 9	 10 let tablearecord3 = new parse object('tablea'); 11 tablearecord3 set('fielda', 'value a 3'); 12 tablearecord3 = await tablearecord3 save(); 13	 14 // create tableb and its records, some of them linked to tablea 15 let tablebrecord1 = new parse object('tableb'); 16 tablebrecord1 set('fieldb', 'value b 1'); 17 tablebrecord1 set('link', tablearecord1); 18 tablebrecord1 = await tablebrecord1 save(); 19	 20 let tablebrecord2 = new parse object('tableb'); 21 tablebrecord2 set('fieldb', 'value b 2'); 22 tablebrecord2 set('link', tablearecord1); 23 tablebrecord2 = await tablebrecord2 save(); 24	 25 let tablebrecord3 = new parse object('tableb'); 26 tablebrecord3 set('fieldb', 'value b 3'); 27 tablebrecord3 set('link', tablearecord3); 28 tablebrecord3 = await tablebrecord3 save(); 29	 30 let tablebrecord4 = new parse object('tableb'); 31 tablebrecord4 set('fieldb', 'value b 4'); 32 tablebrecord4 = await tablebrecord4 save(); 33	 34 console log('success!'); 3 consultando os dados agora que você preencheu as classes, podemos agora realizar as consultas relacionais nelas vamos começar realizando o inner join inner join , introduzindo a consulta relacional de junção que usaremos em todos os nossos exemplos esta consulta representa os resultados de duas consultas combinadas entre as tabelas a e b, retornando todos os registros que estão relacionados por uma condição específica usando o parse query matchesquery parse query matchesquery método 1 // join query, get all records in tablea that have matching records in tableb 2 let innerquerytablea = new parse query("tablea"); 3 // limit to 10 results only for example so we don't fetch too much data 4 innerquerytablea limit(10); 5 let joinquerytableb = new parse query("tableb"); 6 // match the tablea query by the "link" property 7 joinquerytableb matchesquery("link", innerquerytablea); 8 // include the "link" property so we have the content of tablea as well 9 joinquerytableb include("link"); 10 let joinqueryresults = await joinquerytableb find(); 11	 12 // inner join, get only the records in tablea that have matching records in tableb 13 console log("inner join"); 14 console log("table a id | field a | field b"); 15 for (let joinresult of joinqueryresults) { 16 console log( 17 `${joinresult get("link") id} | ${joinresult 18 get("link") 19 get("fielda")} | ${joinresult get("fieldb")}` 20 ); 21 } o inner join inner join comportamento da consulta sql é exatamente o que é alcançado em nossa consulta relacional de junção genérica, então precisamos imprimir seus resultados no console lembre se de que com um parse object parse object você pode usar o método get para recuperar dados usando o nome da coluna agora vamos realizar um left outer join left outer join consistindo em obter todos os registros na tablea tablea e mostrar os dados relacionais na tableb, quando disponíveis 1 // join query, get all records in tablea that have matching records in tableb 2 let innerquerytablea = new parse query("tablea"); 3 // limit to 10 results only for example so we don't fetch too much data 4 innerquerytablea limit(10); 5 let joinquerytableb = new parse query("tableb"); 6 // match the tablea query by the "link" property 7 joinquerytableb matchesquery("link", innerquerytablea); 8 // include the "link" property so we have the content of tablea as well 9 joinquerytableb include("link"); 10 let joinqueryresults = await joinquerytableb find(); 11	 12 // left outer join, get records in tablea that have matching records in tableb and also every 13 // other tablea record 14 let querytablea = new parse query("tablea"); 15 querytablea limit(10); 16 let querytablearesults = await querytablea find(); 17 console log("left join"); 18 console log("table a id | field a | field b"); 19 for (let result of querytablearesults) { 20 // get all entries from join query that have a link to this tablea entry 21 let joinqueryresultsfiltered = joinqueryresults filter( 22 (joinqueryresult) => 23 joinqueryresult get("link") !== undefined && 24 joinqueryresult get("link") id == result id 25 ); 26 if (joinqueryresultsfiltered length > 0) { 27 for (let joinresult of joinqueryresultsfiltered) { 28 let fieldbvalue = joinresult get("fieldb"); 29 console log(`${result id} | ${result get("fielda")} | ${fieldbvalue}`); 30 } 31 } else { 32 console log(`${result id} | ${result get("fielda")} | `); 33 } 34 } o right outer join right outer join é o oposto do esquerdo, buscando os registros de tableb tableb 1 // join query, get all records in tablea that have matching records in tableb 2 let innerquerytablea = new parse query("tablea"); 3 // limit to 10 results only for example so we don't fetch too much data 4 innerquerytablea limit(10); 5 let joinquerytableb = new parse query("tableb"); 6 // match the tablea query by the "link" property 7 joinquerytableb matchesquery("link", innerquerytablea); 8 // include the "link" property so we have the content of tablea as well 9 joinquerytableb include("link"); 10 let joinqueryresults = await joinquerytableb find(); 11	 12 // right outer join, get records in tablea that have matching records in tableb and also every 13 // other tableb record 14 let querytableb = new parse query("tableb"); 15 querytableb limit(10); 16 let querytablebresults = await querytableb find(); 17 console log("right join"); 18 console log("table b id | field a | field b"); 19 for (let result of querytablebresults) { 20 // get all entries from join query that matches this tableb entry 21 let joinqueryresultsfiltered = joinqueryresults filter( 22 (joinqueryresult) => joinqueryresult id == result id 23 ); 24 if (joinqueryresultsfiltered length > 0) { 25 for (let joinresult of joinqueryresultsfiltered) { 26 let fieldavalue = ""; 27 if (joinresult get("link") !== undefined) { 28 fieldavalue = joinresult get("link") get("fielda"); 29 } 30 console log( 31 `${result id} | ${fieldavalue} | ${joinresult get("fieldb")}` 32 ); 33 } 34 } else { 35 console log(`${result id} | | ${result get("fieldb")}`); 36 } 37 } finalmente, temos o full outer join full outer join que é a combinação dos joins internos esquerdo e direito 1 // join query, get all records in tablea that have matching records in tableb 2 let innerquerytablea = new parse query("tablea"); 3 // limit to 10 results only for example so we don't fetch too much data 4 innerquerytablea limit(10); 5 let joinquerytableb = new parse query("tableb"); 6 // match the tablea query by the "link" property 7 joinquerytableb matchesquery("link", innerquerytablea); 8 // include the "link" property so we have the content of tablea as well 9 joinquerytableb include("link"); 10 let joinqueryresults = await joinquerytableb find(); 11	 12 // full outer join, combining left and right outer join results 13 console log("full join"); 14 console log("table id | field a | field b"); 15 // first print all inner join results 16 for (let joinresult of joinqueryresults) { 17 console log( 18 `${joinresult get("link") id} | ${joinresult 19 get("link") 20 get("fielda")} | ${joinresult get("fieldb")}` 21 ); 22 } 23 // print left join leftovers 24 let outerquerytablea = new parse query("tablea"); 25 outerquerytablea limit(10); 26 let outerquerytablearesults = await outerquerytablea find(); 27 // get all entries from query that doesn't match the join query results 28 let filteredouterquerytablearesults = outerquerytablearesults filter( 29 (outerquerytablearesult) => 30 joinqueryresults find( 31 (joinqueryresult) => 32 joinqueryresult get("link") !== undefined && 33 joinqueryresult get("link") id === outerquerytablearesult id 34 ) === undefined 35 ); 36 for (let result of filteredouterquerytablearesults) { 37 console log(`${result id} | ${result get("fielda")} | `); 38 } 39 // print right join leftovers 40 let outerquerytableb = new parse query("tableb"); 41 outerquerytableb limit(10); 42 let outerquerytablebresults = await outerquerytableb find(); 43 // get all entries from query that doesn't match the join query results 44 let filteredouterquerytablebresults = outerquerytablebresults filter( 45 (outerquerytablebresult) => 46 joinqueryresults find( 47 (joinqueryresult) => joinqueryresult id === outerquerytablebresult id 48 ) === undefined 49 ); 50 for (let result of filteredouterquerytablebresults) { 51 console log(`${result id} | | ${result get("fieldb")}`); 52 } conclusão no final deste guia, você aprendeu como realizar consultas relacionais no back4app usando parse e emulando as consultas sql mais comuns join join em um banco de dados nosql