首页 > 解决方案 > 如何过滤特定值的 json 列?

问题描述

我在 postgres 上,并且有一个orders带有datajsonb 列的表。这是其中一个数据的精简示例 - 它们具有 UUID 键和值{ id, value }

  {
    '36462bd9-4ffa-4ee3-9a04-c2eb7575fe6c': {
      id: '',
      value: '2020-04-20T01:32:14.017Z',
    },
    '9baaed61-1275-4bbc-ae4f-2994ec9f7fda': { id: '4', value: 'Paper Towels' },
  }

如何进行操作,例如查找data具有某些 UUID(即9baaed61-1275-4bbc-ae4f-2994ec9f7fda)和的任何订单{ id: '4' }

标签: sqlpostgresql

解决方案


您可以使用包含运算符@>

select *
from the_table
where data @> '{"9baaed61-1275-4bbc-ae4f-2994ec9f7fda": {"id": "4"}}'; 

这假设id: '4'您问题中的无效 JSON 确实存储为"id":"4". 如果该值存储为数字:"id": 4那么您需要在比较值中使用它。


推荐阅读