Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails JSONB查询数组_Ruby On Rails_Ruby_Database_Postgresql - Fatal编程技术网

Ruby on rails JSONB查询数组

Ruby on rails JSONB查询数组,ruby-on-rails,ruby,database,postgresql,Ruby On Rails,Ruby,Database,Postgresql,我在PostgreSQL表中有一列,该列有一个JSONB字段,其中包含如下数据: [{"id":33,"url":"","name":"test"}, {"id":45,"url":"","name":"test"}] 我试图查询它并返回与id匹配的元素。我在Rails中有以下查询,但它似乎不匹配

我在PostgreSQL表中有一列,该列有一个JSONB字段,其中包含如下数据:

[{"id":33,"url":"","name":"test"}, {"id":45,"url":"","name":"test"}]
我试图查询它并返回与id匹配的元素。我在Rails中有以下查询,但它似乎不匹配:


Book.where('data@>?','[{“id”:33}]')

由于您只需要jsonb数组中的一些元素,因此需要将这些元素转换为记录并与其父元素交叉连接:

Book.joins(", jsonb_array_elements(books.data) obj")
    .where("obj->>'id' = '33'")
    .select("obj")

由于您只需要jsonb数组中的一些元素,因此需要将这些元素转换为记录并与其父元素交叉连接:

Book.joins(", jsonb_array_elements(books.data) obj")
    .where("obj->>'id' = '33'")
    .select("obj")

查询的预期返回结果是什么?@DanielSindrestean,我希望它返回基于id等于33的匹配数组元素。因此,它应该返回
{“id”:33,“url”:“name”:“test”}
下面的答案是否解决了您的问题?查询的预期返回结果是什么?@DanielSindrestean,我希望它返回基于id等于33的匹配数组元素。因此,它应该返回
{“id”:33,“url”:“name”:“test”}
下面的答案是否解决了您的问题?