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", "type": "gaming", "name": "Pokemon Blue" }, { "id": "ms-surface-book", "type": "computing", "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 |
SELECT forum.id, forum.type, item FROM forum 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", "type": "gaming" }, "type": "order" }, { "id": "order-1", "item": { "id": "ms-surface-book", "name": "Microsoft Surface Book", "type": "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 |
SELECT forum.id, forum.type, ARRAY item FOR item IN forum.items WHEN item.type != 'computing' END AS item FROM forum |
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"
}
]
}