O Couchbase Lite 2.0 suporta a capacidade de realizar JOINS em seus documentos JSON. Isso faz parte da nova interface de consulta baseada em N1QLa linguagem de consulta declarativa do Couchbase que estende o SQL para JSON. Se você estiver familiarizado com SQL, vai se sentir em casa com a semântica da nova API.

Os JOINS permitem que você combine o conteúdo de vários documentos. Nesta publicação, forneceremos exemplos para ilustrar os tipos de JOINS possíveis com o Couchbase Lite. Para cada uma das consultas, forneceremos a consulta SQL equivalente. Este blog pressupõe que você esteja familiarizado com os fundamentos da nova API de consulta, portanto, se ainda não tiver feito isso, não deixe de revisar o artigo postagem anterior primeiro. Se estiver interessado, os links para blogs que discutem outros recursos da interface do Query são fornecidos no final desta publicação.

Você pode fazer o download das compilações mais recentes do Couchbase Mobile 2.0 Pre-Release em nosso downloads página.

Histórico

Se você estava usando as versões 1.x do Couchbase Mobile, provavelmente está familiarizado com Visualizações de mapas para criar índices e consultas. Na versão 2.0, você não precisa mais criar visualizações e funções de mapa! Em vez disso, uma interface simples permite a criação de índices e você pode usar uma interface do Query Builder para construir suas consultas. A nova interface de consulta é mais simples de usar e muito mais poderosa em comparação. Vamos descobrir alguns de seus recursos nesta postagem.

Projeto de amostra

Embora os exemplos discutidos aqui usem o Swift para iOS, a mesma interface de consulta também é compatível com as plataformas Android e Windows.

Portanto, com alguns pequenos ajustes, você poderá reutilizar os exemplos de consulta desta postagem ao trabalhar com outras plataformas.

Siga as instruções abaixo se você estiver interessado em um projeto Swift de amostra

  • Clone o iOS Swift Playground do GitHub

  • Siga as instruções de instalação no manual correspondente LEIAME para criar e executar o playground.

Modelo de dados de amostra

Usaremos um banco de dados de amostra localizado aqui. Você pode incorporar esse banco de dados pré-criado em seu aplicativo móvel e começar a usá-lo para suas consultas.

O conjunto de dados de amostra é um pouco artificial, mas o objetivo aqui é demonstrar alguns casos de uso típicos de unir-se consultas.

  • "Documento do tipo "funcionário

  • "Documento do tipo "departamento

  • Documento do tipo "location" (local)

** Consulte o modelo acima para cada um dos exemplos de consulta abaixo. **

O identificador do banco de dados

Nas consultas abaixo, usaremos o Banco de dados API para abrir/criar o banco de dados CouchbaseLite.

Índices

Para acelerar as consultas de leitura, você pode criar índices nas propriedades que serão consultadas. A melhoria no desempenho seria significativa em grandes conjuntos de dados. Obviamente, esteja ciente de que haverá um aumento na necessidade de armazenamento para guardar os índices, e o desempenho das gravações também poderá ser afetado. Portanto, tenha cuidado ao criar muitos índices.

O exemplo a seguir cria um Índice de valor no tipo propriedade de um documento

JOIN ou Inner JOIN

Você pode usar uma consulta JOIN ou Inner JOIN simples para buscar propriedades dos documentos participantes se e somente se ambos os documentos atenderem às condições especificadas no ON cláusula.

Por exemplo, considerando o modelo de dados que apresentamos anteriormente, vamos supor que você queira buscar o firstName, lastName de um "funcionário" e o correspondente nome do "departamento" ao qual o funcionário pertencia. Nesse caso, primeiro nome e sobrenome as propriedades são obtidas do documento de tipo "funcionário" e o departamento nome é obtido do documento de tipo "departamento" se e somente se o departamento da propriedade "employee" corresponde à propriedade código propriedade no "departamento"

Isso implica que, se não houver documentos de "departamento" que correspondam ao código no documento "employee", os detalhes desse funcionário não serão incluídos no resultado de saída

Solicitação

 

ANSI SQL

A instrução SQL equivalente para a consulta acima seria

 

Left JOIN ou Left Outer JOIN

Você pode usar uma consulta JOIN à esquerda para obter propriedades dos documentos participantes se ambos os documentos atenderem às condições especificadas no ON cláusula. No entanto, diferentemente de um JOIN regular, os resultados também incluirão documentos não correspondentes no lado esquerdo da cláusula ON da expressão JOIN.

Por exemplo, considerando o modelo de dados que apresentamos anteriormente, vamos supor que você queira buscar o firstName, lastName de um "funcionário" e o correspondente nome do "departamento" ao qual o funcionário pertencia.
Além disso, vamos supor que também estejamos interessados nofirstName e lastName de um "funcionário" cujo departamento código faz não corresponde a um departamento válido. Esse poderia ser o caso, por exemplo, se o departamento O código do funcionário foi inserido incorretamente.

Nesse caso, primeiro nome e sobrenome as propriedades são obtidas do documento de tipo "funcionário" e o departamento nome é obtido do documento de tipo "departamento" se o departamento da propriedade "employee" corresponde à propriedade código propriedade no "departamento".

Se não houver um departamento correspondente, somente o primeiro nome e sobrenome do documento "employee" são retornadas.

Solicitação

ANSI SQL

A instrução SQL equivalente para a consulta acima seria

 

Cross JOIN

Você pode usar uma consulta cross JOIN para buscar o produto cartesiano das propriedades dos documentos participantes, que normalmente não estão relacionados entre si. Isso é o equivalente a um inner JOIN sem o ON da expressão de união.

Por exemplo, considerando o modelo de dados que apresentamos anteriormente, vamos supor que você queira buscar o produto cartesiano de todos os documentos de tipo "localização" e tipo "departamento". Em outras palavras, cada "local" tipo seria combinado com cada um dos documentos do "departamento" tipo documentos.

Como não há em especificada na expressão cross JOIN, você precisaria incluir uma cláusula onde para filtrar o subconjunto de documentos a ser considerado com base no documento tipo.

Solicitação

ANSI SQL

A instrução SQL equivalente para a consulta acima seria

 

Encadeamento de JOINs

É possível especificar várias expressões JOIN em seu selecionar para poder unir-se a documentos com base em critérios diferentes.

Por exemplo, considerando o modelo de dados que apresentamos anteriormente, vamos supor que você queira buscar o firstName, lastName de um "funcionário" e o correspondente nome do "departamento" ao qual o funcionário pertencia. Além disso, você também queria identificar o nome do "local" em que o funcionário estava baseado.

Nesse caso, usamos duas expressões JOIN.
A primeira expressão JOIN é usada para unir documentos de tipo "funcionário" com documentos de tipo "department" com base na propriedade "department code". Nesse caso, a propriedade primeiro nome e sobrenome as propriedades são obtidas do documento de tipo "funcionário" e o departamento nome é obtido do documento de tipo "departamento" se e somente se o departamento da propriedade "employee" corresponde à propriedade código propriedade no "departamento".

A segunda expressão JOIN é usada para unir documentos de tipo "funcionário" com documentos de tipo "location" com base na propriedade "location code". Nesse caso, a propriedade primeiro nome e sobrenome as propriedades são obtidas do documento de tipo "funcionário" e o local nome é obtido do documento de tipo "localização" se e somente se o localização da propriedade "employee" corresponde à propriedade código propriedade no "departamento".

Solicitação

ANSI SQL

A instrução SQL equivalente para a consulta acima seria

 

JOIN Expressões com funções

Embora todos os exemplos tenham usado o igual a na expressão JOIN, deve-se observar que você pode usar qualquer operador de comparação, como entre, greaterThanOrEqualTo e assim por diante na expressão JOIN. Você também pode incluir qualquer Função expressões. Esse é um recurso poderoso.

Por exemplo, considerando o modelo de dados que apresentamos anteriormente, vamos supor que você queira buscar o departamento nome e correspondente localização nomes do "local" onde o departamento estava baseado. Um departamento pode pertencer a um ou mais locais.
Nesse caso, a expressão JOIN uniria documentos do tipo "department" (departamento) e "location" (local) procurando correspondências em qualquer um dos membros da tabela localização do documento do departamento usando a propriedade de matriz ArrayFunction expressão.

 

ANSI SQL

As matrizes não são compatíveis com o SQL. Entretanto, o N1QL inclui suporte para matrizes. A instrução do tipo SQL correspondente para a consulta acima seria

 

O que vem a seguir

Esta postagem do blog analisou o poderoso recurso JOIN do Couchbase Mobile 2.0, que permite combinar resultados de vários documentos JSON. Você pode download Couchbase Mobile 2.0 e teste as consultas discutidas nesta publicação. Isso é um começo. Espere ver mais funcionalidades em versões futuras.

Aqui estão algumas outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse
- Isso postagem no blog discute os fundamentos
- Isso postagem no blog discute como consultar coleções de matrizes
- Isso postagem no blog discute os recursos de pesquisa de texto completo (FTS).

Se tiver dúvidas ou comentários, deixe um comentário abaixo ou entre em contato comigo pelo Twitter @rajagp ou envie-me um e-mail priya.rajagopal@couchbase.com. O Fóruns do Couchbase são outro bom lugar para entrar em contato com perguntas.

Autor

Postado por Priya Rajagopal, Diretora Sênior, Gerenciamento de Produtos

Priya Rajagopal é diretora sênior de gerenciamento de produtos da Couchbase, responsável pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente há mais de 20 anos em vários cargos técnicos e de liderança de produtos, com mais de 10 anos de foco em tecnologias móveis. Como delegada de padrões de IPTV da TISPAN, ela foi uma das principais colaboradoras das especificações de padrões de IPTV. Ela tem 22 patentes nas áreas de rede e segurança de plataforma.

Deixar uma resposta