jsonb ищет ключи в массиве и возвращает позицию - PullRequest
0 голосов
/ 20 марта 2020

У меня есть следующий json объект, сохраненный в столбце jsonb

{
  "msrp": 6000,
  "data": [
    {
      "supplier": "a",
      "price": 5775
    },
    {
      "supplier": "b",
      "price": 6129
    },
    {
      "supplier": "c",
      "price": 5224
    },
    {
      "supplier": "d",
      "price": 5775
    }
  ]
}

Есть несколько вещей, которые я пытаюсь сделать, но полностью застрял: (

  1. Проверьте, существует ли поставщик в этом массиве. Поэтому, если я смотрю, есть ли здесь «поставщик»: «е». Вот что я пытался, но не работал. «Где данные @> '{« поставщик »:» e "} '"
  2. (необязательно, но очень приятно иметь) Прежде чем возвращать результаты, если я делаю выборку *, вставьте в каждый массив "price_diff", чтобы я мог видеть разницу между msrp и цена поставщика как таковая.

    {
      "supplier": "d",
      "price": 5775,
      "price_diff": 225
    }
    

1 Ответ

0 голосов
/ 20 марта 2020
where data @> '{"supplier": "e"}'

У вас есть столбец с именем data? Вы не можете просто обрабатывать имя ключа JSONB, как если бы оно было именем столбца.

Сдерживание начинается с root.

colname @> '{"data":[{"supplier": "e"}]}'

Вы можете динамически переопределить 'root', хотя:

colname->'data' @> '[{"supplier": "e"}]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...