我正在尝试查询对象数组中存在的键。这种结构:
column jdata
{"name": "Somedata",
"array": [ {"name":"bla1", "attr": "somevalue"},
{"name":"bla2", "otherdata": "somevalue2"},
{"name":"bla3", "otherdata": "somevalue"}
],
"otherstuff": "stuff"
}
Run Code Online (Sandbox Code Playgroud)
现在我在jdata->'name'
or上做 btree (jdata->'datetime')::cast
,效果很好。
我也做 json_path_opsjdata->'array' @> '[{"name":"bla3"}]'
真正的魅力所在。
我的问题是attr
键可以在数组中的任何对象中,如果键存在,我关心记录,但是值几乎可以是任何东西。有没有办法查询这个?有没有办法索引它?我想做jdata->'array' @> '[{"attr": ?}]'
或者也许? 'attr'
可以在数组中以某种方式使用?
目前我正在考虑一个扫描键的触发器,然后将它移动到一个带有 true 或 false 或其他什么的标题,然后一个普通的 btree 将工作。有没有更好的办法?我需要在平均站点上编辑大约 50 万条记录才能添加这些值。
请给我指明一个方向。