psql как выбрать, есть ли какие-либо свойства в массиве объекта, если определенное значение

#json #psql

Вопрос:

Я хочу выбрать каждую строку, в которой есть args.args_json.actions ==> любой идентификатор до 79

 {
  "args": {
    "args_json": {
      "actions": [
        {
          "id": 79
        },
        {
          "id": 47

        },
        {
          "id": 82
        }
      ]
    }
  }
}
 

Я попробовал args #> '{args_json,actions,0}' ->> 'id' = '79' , и это работает, но только для проверки индекса 0.

Я хотел бы того же, но возвращает true, если какой-либо идентификатор равен 79, а не только индекс 0.

Ответ №1:

Нет необходимости разыменовывать, вы можете просто использовать оператор сдерживания @> с большим JSON:

 WHERE args @> '{ "args_json": { "actions": [ { "id":79 } ] } }'
 

Ответ №2:

аргументы #> ‘{args_json,действия}’ @>> ‘[{«идентификатор»:79}]’ ;