【问题标题】:Get data from any items in array从数组中的任何项目获取数据
【发布时间】:2020-09-03 13:49:35
【问题描述】:

PosgreSQL 9.5

字段类型:jsonb

这里是json

{
  "options": [
    {
      "name": "method"
    },
    {
      "name": "flavor"
    },
    {
      "name": "weight",
      "value": {
        "name": "300g"
      }
    }
  ]
}

这里查询从数组中获取索引 = 2 的项目 (weight) 的值:

SELECT 
id, 
product.data #>'{title,en}' AS title_en,
product.data #>>'{options, 2, value, name }' as options_weight_value
FROM product 

很好。它工作正常。

但是权重 可以在数组中的任何索引中的问题。第一个或第二个等等。

所以我需要在节点 "weight" 中获取 name (300g) 的值。 我需要这样的 smt:

  SELECT 
    id, 
    product.data #>'{title,en}' AS title_en,
    product.data #>>'{options, *, value, name, weight }' as options_weight_value
    FROM product 

有可能吗?

【问题讨论】:

  • 你能改变JSON结构吗?做类似{"method": "...", "flavor": "...", "weight": "300g"}的事情会更有效率
  • @a_horse_with_no_name 不,我无法更改 json。
  • @a_horse_with_no_name 我被添加了我的解决方案

标签: postgresql-9.5


【解决方案1】:

我想我找到了解决方案:

SELECT 
id,
p.data #>'{title,en}' AS title_en,
p.data #>'{weight,qty}' AS weight_qty,
(select * 
from jsonb_array_elements(p.data -> 'options') AS options_array
where 
 options_array ->> 'name' = 'weight'
) #>'{value,name}' as options_weight
from product p

现在在任何数组的项目中找到weight(如果存在)的值。在这个例子中它 = 300g

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2017-03-27
    • 2014-08-17
    • 2014-02-15
    • 1970-01-01
    • 2022-12-12
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多