我正在尝试测试jsonPostgreSQL 9.3中的类型.
我在一个json名为data的表中调用了一列reports.JSON看起来像这样:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Run Code Online (Sandbox Code Playgroud)
我想查询表中所有与'objects'数组中'src'值匹配的报告.例如,是否可以在数据库中查询匹配的所有报告'src' = 'foo.png'?我成功写了一个可以匹配的查询"background":
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Run Code Online (Sandbox Code Playgroud)
但由于"objects"有一系列的价值观,我似乎无法写出有用的东西.是否可以在数据库中查询匹配的所有报告'src' = 'foo.png'?我查看了这些来源,但仍然无法得到它:
我也尝试过这样的事情,但无济于事:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Run Code Online (Sandbox Code Playgroud)
我不是SQL专家,所以我不知道我做错了什么.
我正在开发一个利用Postgres JSON数据类型的Rails应用程序.我在一个名为data的表中调用了一个JSON列reports.假设我有多个这样的条目:
Entry 1: {"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barB.png", "pos": "top"}], "background":"background.png"}
Entry 2: {"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barC.png", "pos": "top"}], "background":"bacakground.png"}
Entry 3: {"objects":[{"album": 1, "src":"fooA.png", "pos": "middle"},{"album": 2, "src":"barB.png", "pos": "middle"}],"background":"background.png"}
Entry 4: {"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 3, "src":"barB.png", "pos": "top"}], "background":"backgroundA.png"}
Run Code Online (Sandbox Code Playgroud)
我想要做的是返回具有相同相册,src和背景的条目的不同组合(注意:在objects节点内,数组元素的顺序无关紧要).例如,查询应将条目1,3作为一个组匹配,条目2作为另一个组,等等.目标是找到前3个最常见的组合.我知道如何使用Ruby来做这件事,但我必须查询大量的条目样本,然后遍历所有条目.如果它可以处理这个任务,使用Postgres似乎更有效.我不足以让SQL专家知道这是否可行.
这是我正在寻找的结果.在objects条目中,条目1和3都包含{"album": 1, "src":"fooA.png"}, {"album": 2, "src":"barB.png"},以及两者都匹配backgrounds.我想将它们组合为一个计数为2的组合.
由于条目2与此条件下的任何条目都不匹配,因此它是另一个计数为1的组合.条目4也被认为是另一个计数为1的组合.因此,我所追求的结果将是:
ids | count
--------------
1,3 | 2 …Run Code Online (Sandbox Code Playgroud)