Eu estava navegando no site do Couchbase fóruns e me deparei com uma pergunta sobre consultas a dados de matriz no Couchbase. Como venho de um banco de dados relacional, também tive dificuldades para entender o conceito de consulta de dados JSON formatados complexos com SQL.
Como você faz consultas nesses documentos NoSQL incorporados? Há várias maneiras, nenhuma das quais é particularmente difícil. Examinaremos algumas das possibilidades de consultas complexas.
Caso você esteja curioso sobre a pergunta com a qual me deparei, ela pode ser encontrada aqui. O usuário queria saber como consultar os objetos que estavam aninhados em uma matriz para um único documento. O modelo de documento proposto era semelhante a este:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "id": "order-1", "type": "order", "items": [ { "id": "pokemon-blue", "tipo": "gaming", "name": "Pokemon Blue" }, { "id": "ms-surface-book", "tipo": "computação", "name": "Microsoft Surface Book" } ] } |
O objetivo final era poder obter cada objeto em uma consulta com base em um ONDE
que incluía a condição aninhada tipo
propriedade.
Uma maneira de fazer isso é escrever uma consulta N1QL parecida com a seguinte:
1 2 3 4 5 |
SELECIONAR forum.id, forum.type, item DO fórum UNNEST items AS item WHERE item.type != "computing"; |
Na consulta acima, estamos executando um SELECIONAR
de um Bucket do Couchbase chamado fórum
e achatando a matriz usando o INÚTIL
palavra-chave. O conjunto de resultados achatados se pareceria com o seguinte antes de aplicar a palavra-chave ONDE
condição:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[ { "id": "order-1", "item": { "id": "pokemon-blue", "name": "Pokemon Blue", "tipo": "gaming" (jogos) }, "type": "order" }, { "id": "order-1", "item": { "id": "ms-surface-book", "nome": "Microsoft Surface Book", "tipo": "computing" }, "type": "order" } ] |
O ONDE
nos retornará um único resultado em vez de dois, sendo que o único resultado é de um jogos
de acordo com nossa consulta.
Então, essa é a única maneira de realizar o que acabamos de fazer? Absolutamente não!
Veja a seguinte consulta N1QL:
1 2 3 4 5 |
SELECIONAR forum.id, forum.type, ARRAY item FOR item IN forum.items WHEN item.type != 'computing' END AS item DO fórum |
Na consulta acima, não estamos primeiro achatando a matriz no Couchbase com um INÚTIL
operação. Em vez disso, estamos usando uma das operadores de coleta para encontrar itens de matriz que atendam aos nossos critérios.
Existem outras maneiras de fazer o trabalho? É claro que existem, mas essas duas devem ser suficientes para você começar a consultar arrays no Couchbase com o N1QL e o INÚTIL
palavra-chave.
Se precisar de mais ajuda com o N1QL, dê uma olhada na seção Portal do desenvolvedor do Couchbase para outros exemplos.
[...] em um artigo recente, escrevi sobre achatamento e consulta de arrays no Couchbase usando N1QL. Esse artigo foi inspirado por uma pergunta popular nos fóruns do Couchbase. Depois de publicar o [...]
Existe uma maneira de usar o NEST desses resultados em uma matriz? Por exemplo:
{
"id": "order-1",
"type": "order",
"items": [
{
"id": "pokemon-blue",
"tipo": "gaming",
"name": "Pokemon Blue"
}
]
}