jsonb在数组中搜索键并返回位置

时间:2020-03-19 22:25:39

标签: postgresql

我将以下json对象存储在jsonb列中

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

我正在尝试做一些事情,但完全停留在:(

  1. 检查此阵列中是否存在供应商。因此,如果我正在查找“供应商”:“ e”是否在这里。这是我尝试过但没有奏效的方法。 “ where data @>'{”供应商“:” e“}'”
  2. (可选,但确实很不错)如果我执行select *,在返回结果之前,请在每个数组中插入一个“ price_diff”,这样我就可以看到msrp和供应商价格之间的差异。 >

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

1 个答案:

答案 0 :(得分:0)

where data @> '{"supplier": "e"}'

您是否有一个名为data的列?您不能仅仅将JSONB密钥名称视为列名称。

遏制始于根源。

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

您可以通过以下方式动态地重新定义“ root”:

colname->'data' @> '[{"supplier": "e"}]'
相关问题