首页 > 解决方案 > jsonb在数组中搜索键并返回位置

问题描述

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

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

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

  1. 检查此数组中是否存在供应商。因此,如果我正在查找“供应商”:“e”是否在这里。这是我尝试过但没有奏效的方法。“其中数据@>'{“供应商”:“e”}'”
  2. (可选但非常好)如果我执行选择 * 在返回结果之前,请在每个数组中注入一个“price_diff”,以便我可以看到 msrp 和供应商价格之间的差异。

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

标签: postgresql

解决方案


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

你有一个名为数据的列吗?您不能只将 JSONB 键名视为列名。

遏制从根开始。

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

您可以动态地重新定义“根”:

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

推荐阅读