gpt4 book ai didi

postgresql 12 jsonb_path_query 如何从一个大的 jsonb 对象中选择一些键来构造一个小对象?

转载 作者:行者123 更新时间:2023-12-05 06:48:32 24 4
gpt4 key购买 nike

我在 Postgres 12 中有一个 data JSONB 列,它保存了一个带有 .interactions 字段的大对象,该字段是一个大对象数组,每个对象都很大, 应用层不需要的字段太多,不知道有没有办法只查询出感兴趣的字段?

{
"interactions": [
{ "k1": ..., "k2": ..., "k3": ..., "k4": ... },
{ "k1": ..., "k2": ..., "k3": ..., "k4": ... },
{ "k1": ..., "k2": ..., "k3": ..., "k4": ... },

]
// many other key-value pairs
}

想要这样的东西:假设唯一感兴趣的字段是 k1, k3, ...

SELECT jsonb_path_query_array(data, '$.interactions[*].{k1,k3}')

获得纤细的结果对象,例如:

[ { "k1", ..., "k3": ... }, { "k1", ..., "k3": ... } ]

在命令行上使用 jq 就像 { k1,k3 } 一样简单:

➸  echo '{"k1":3,"k2":4,"k3":5,"k4":"ok"}
{"k1":-1,"k2":2,"k3":6}' | jq -c '{ k1, k3 }'
{"k1":3,"k3":5}
{"k1":-1,"k3":6}

还有一个问题:像 k1,k3 这样感兴趣的字段名称可以不硬编码,而是作为不同应用程序逻辑提供的参数吗?

最佳答案

到目前为止,我只知道如何构建单个对象,从大对象到只有感兴趣字段的小对象,

SELECT jsonb_build_object(
'k1', data->'k1',
'k3', data->'k3',
// ...
) FROM ...

但不确定如何从数组中申请每个对象?在 javascript 中是这样的:

dataArray.map(obj =>
['f1', 'f3'].reduce((acc, k) => Object.assign(acc, {[k]: obj[k]}), {}))

关于postgresql 12 jsonb_path_query 如何从一个大的 jsonb 对象中选择一些键来构造一个小对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66809761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com