Consulta SQL++ / N1QL

Como consultar coleções de matrizes no Couchbase Lite

Um dos principais recursos introduzidos no Couchbase Lite 2.0é a 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. Cobrimos os conceitos básicos da interface em um artigo anterior postagem no blog. As matrizes são um componente integral da modelagem de dados com JSON. Nesta postagem do blog, discutiremos a consulta de coleções de matrizes usando a nova API.

Este blog pressupõe que você esteja familiarizado com os fundamentos, portanto, se ainda não o fez, não deixe de revisar o postagem anterior primeiro. A última seção do post lista links para outros blogs de consulta relevantes.

Você pode fazer o download das compilações de pré-lançamento do Couchbase Mobile 2.0 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, observe que, salvo algumas pequenas diferenças, 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 publicação 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 o banco de dados Travel Sample localizado aqui

O conjunto de dados de amostra inclui vários tipos de documentos, conforme identificado pelo tipo no documento. Vamos nos concentrar em documentos de tipo "hotel" . O modelo de documento JSON é mostrado abaixo. Para fins de brevidade, omitimos algumas das propriedades do modelo abaixo.

Especificamente, observe que o modelo inclui coleções aninhadas - public_likes e revisões. As consultas nas seções seguintes lidarão com essas coleções aninhadas.

** 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

O exemplo a seguir cria um Índice de valor em tipo e nome propriedades de um documento

Contenção de matrizes

A consulta abaixo busca o IDs, nomes e public_likes propriedades de documentos em que o public_likes propriedade de matriz em "hotel" tipo contém o valor de "Corrine Hilll". Para isso, o **ArrayFunction.contains** é usada na expressão da função public_likes matriz.

Tamanho da matriz

A consulta abaixo busca o IDs, nomes e as propriedades tamanho de public_likes propriedade de matriz em "hotel" tipo documentos. Para isso, o **ArrayFunction.length** é usada na expressão da função public_likes para obter o tamanho da matriz.

Além disso, observe que estamos usando como expressão para pseudônimo o valor de contagem da matriz para NumLikes. Nós apresentamos aliases na postagem anterior do blog sobre Fundamentos da consulta. Se você não colocar um alias no resultado do arrayLength a chave da propriedade seria $1 o que não é muito intuitivo.

Avaliação de membros da matriz

Enquanto o ArrayFunction.contains permite que você verifique se a matriz dada contém um valor específico, a expressão da função em pode ser usada para avaliar qualquer um ou todos os membros de uma matriz em relação a um critério especificado pela expressão de matriz satisfaz expressão. Esse é um recurso avançado de filtragem de documentos.

Oemé usada com a expressão qualquer, todos ou o anyAndEvery operadores quantificados em Expressão de matriz para avaliar qualquer, todo ou qualquer/todo elemento no objeto de matriz.

A consulta a seguir retorna os documentos em que qualquer dos valores no public_likes O array começa com os caracteres "Corr".

    1. Declare uma variável com o nome "likedby" para representar cada elemento no public_likes matriz
    2. O qualquer ArrayExpression verifica se o elemento da matriz representado pelo apreciado por satisfaz os critérios da variável como expressão. A como verifica se o valor do item representado pela variável "likedby" começa com "Cor".

Matrizes de indexação

Você também pode consultar elementos em índices específicos. A consulta a seguir retorna o nome e primeiro membro da public_likes propriedades de matriz de todos os documentos "hotel

Avaliação de matrizes aninhadas

Você pode avaliar os membros de uma matriz aninhada. Para isso, você pode aplicar um caminho das teclas para a expressão da variável. A matriz aninhada deve ter um nível de profundidade.

A consulta a seguir retorna os documentos em que qualquer dos valores na tabela aninhada classificações tem a matriz Geral classificação de propriedade maior ou igual a 4.
Como você deve ter notado no modelo de dados acima, a propriedade "reviews" contém uma matriz de objetos. Cada um dos objetos contém um objeto classificações que, por sua vez, contém o array Geral propriedade.

  1. Declare uma variável para representar um elemento no revisão.classificações.geral matriz
  2. Declare uma variável para representar cada elemento no revisões matriz
  3. O qualquer verifica se o elemento da matriz representado pela expressão revisão satisfaz os critérios da variável comparação expressão. A comparação verifica o valor de Geral propriedade do classificações no objeto representado pela variável "review" é maior ou igual a 4.

Limitações

Os recursos de manipulação de matriz não são tão extensos quanto os do N1QL conjunto de recursos. Mas é um bom ponto de partida. Esses recursos poderão estar disponíveis em versões futuras do Couchbase Mobile.

Portanto, por enquanto, cabe ao aplicativo manipular os resultados da matriz usando os recursos de processamento de coleção da linguagem.

Vamos considerar este exemplo em swift

  • Com relação ao modelo de dados, digamos que você queira determinar o mínimo Limpeza classificação para um determinado hotel com base nas avaliações sobre o hotel.

Com base no modelo acima, observe que o Limpeza é um membro da propriedade classificações contida em cada objeto que é membro de revisões matriz.

Para isso, você pode fazer uma consulta do Couchbase Lite para buscar o revisões propriedade de matriz para um hotel com Id especificado da seguinte forma -

O resultSet A resposta à consulta acima seria uma matriz com um único elemento. Esse elemento corresponderia ao documento "hotel" para o Id especificado.

Agora, o aplicativo precisa implementar a lógica para iterar sobre o revisões e para cada membro da matriz, para buscar o classificações e a propriedade Limpeza valor.

Aqui está uma maneira possível de fazer isso no swift.

  • Primeiro, itere sobre o resultSet e extraia o valor da propriedade "reviews".

Após o processamento do loop, a matriz "matches" seria algo parecido com o que está abaixo. Seria uma matriz contendo a matriz aninhada correspondente às revisões -

  • Em seguida, você pode usar os recursos da linguagem swift, como flatMap e mapa para processar a matriz resultante e obter a classificação mínima de "Limpeza" para um determinado hotel

Você faria algo semelhante em linguagens que suportam construções funcionais como mapa plano e mapa.

O que vem a seguir

Esta postagem do blog analisou como você pode manipular os tipos de coleção Array usando a nova API de consulta no Couchbase Mobile 2.0. Isso é um começo. Espere ver mais funcionalidades em versões futuras. Você pode fazer o download da versão de pré-lançamento em nosso downloads página.

Aqui estão outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse
- Isso postagem no blog discute os fundamentos da API de consulta
- Isso postagem no blog discute os recursos de pesquisa de texto completo.
- Isso postagem no blog discute como fazer consultas JOIN

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.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

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.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.