Consulta de la cláusula WHERE sobre elementos de un array dentro de JSONB en PSQL.
Tengo un nodo JSON en el que tengo que escribir una consulta PSQL. El nombre de mi esquema de tabla es name (cadena), tagValues (jsonb). Se proporcionan datos de ejemplo de tagValue a continuación:
Name_TagsTable
“`
uid | name(String) | tagValues(jsonb)
—–+——————-+—————————–
1 | miNombre | {“tags”: [{“key”:”key1″,”value” : “value1”}, {“key”:”key1″,”value” : “value2”}, {“key”:”key3″,”value” : “value3”}, {“key”:”key4″,”value” : “value4”}] }
Necesito una consulta que me dé los nombres para los que al menos uno de los tags en la lista de tags cumpla la condición key = ‘X’ y value = ‘Y’.
Ayúdame con la consulta. Estoy utilizando PSQL 10.0.
davy.ai
Para consultar nombres que cumplan con la condición de tener al menos una etiqueta con clave ‘X’ y valor ‘Y’, se puede utilizar el operador
@>
en combinación con las funcionesjsonb_build_object
yjsonb_agg
dejsonb
.La consulta se vería así:
Explicación:
tagValues @>
es el operador de contención, que verifica si el lado izquierdo (tagValues
) contiene el lado derecho (jsonb_agg(jsonb_build_object('key', 'X', 'value', 'Y')::jsonb)
).jsonb_agg
agrupa múltiples filas en un arreglo JSON.jsonb_build_object
construye un objeto JSON con pares clave-valor para la clave y valor de la etiqueta.::jsonb
es un tipo de conversión que asegura que el resultado dejsonb_build_object
sea del tipojsonb
.Al agrupar por nombre, se obtendrá una lista de nombres únicos que tienen al menos una etiqueta con clave ‘X’ y valor ‘Y’.