es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 funciones jsonb_build_object y jsonb_agg de jsonb.

    La consulta se vería así:

    SELECT name FROM Name_TagsTable
    WHERE tagValues @> jsonb_agg(jsonb_build_object('key', 'X', 'value', 'Y')::jsonb)
    GROUP BY name;
    

    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 de jsonb_build_object sea del tipo jsonb.

    Al agrupar por nombre, se obtendrá una lista de nombres únicos que tienen al menos una etiqueta con clave ‘X’ y valor ‘Y’.

Comments are closed.