postgresql - jsonb在数组中搜索键并返回位置
问题描述
我将以下 json 对象存储到 jsonb 列中
{
"msrp": 6000,
"data": [
{
"supplier": "a",
"price": 5775
},
{
"supplier": "b",
"price": 6129
},
{
"supplier": "c",
"price": 5224
},
{
"supplier": "d",
"price": 5775
}
]
}
我正在尝试做一些事情,但完全坚持:(
- 检查此数组中是否存在供应商。因此,如果我正在查找“供应商”:“e”是否在这里。这是我尝试过但没有奏效的方法。“其中数据@>'{“供应商”:“e”}'”
(可选但非常好)如果我执行选择 * 在返回结果之前,请在每个数组中注入一个“price_diff”,以便我可以看到 msrp 和供应商价格之间的差异。
{ "supplier": "d", "price": 5775, "price_diff": 225 }
解决方案
where data @> '{"supplier": "e"}'
你有一个名为数据的列吗?您不能只将 JSONB 键名视为列名。
遏制从根开始。
colname @> '{"data":[{"supplier": "e"}]}'
您可以动态地重新定义“根”:
colname->'data' @> '[{"supplier": "e"}]'
推荐阅读
- angular - Angular Browserslist:caniuse-lite 已过时。请运行下一个命令`npm update`
- xamarin.forms - 如何从构建中排除 WinPhone
- c# - Web API 中的电子邮件确认
- java - 在 Windows 上运行良好的 Java 代码在 Ubuntu 上无法运行
- java - In-app billing acknowledgePurchase 问题 [使用 google play 应用内计费库]
- odbc - 进度数据库、OpenLink、OpenEdge 兼容性
- python - IndexError:Python脚本中的列表索引超出范围
- swiftui - SwiftUI 制作一个只显示一定数量行的列表
- android - Jetpack BottomNavigationView 如何去除动画中的内容淡入淡出
- c# - 如何检测与可为空属性结合的数据类型