问题
查找样本数据中的所有记录,其中foo->bar
至少包括给定数组中的一项,例如[1,2]
样本数据
Record 1 => 'foo': {
'bar': [1,2]
}
Record 2 => 'foo': {
'bar': [3,4]
}
Record 3 => 'foo': {
'bar': [5,7]
}
Record 4 => 'foo': {
'bar': [1]
}
Record 5 => 'foo': {
'bar': [2,3]
}
预期结果
Record 1 => 'foo': {
'bar': [1,2]
}
Record 4 => 'foo': {
'bar': [1]
}
Record 5 => 'foo': {
'bar': [2,3]
}
我尝试使用运算符@>
和?|
,首先检查JSOB并仅在包括所有项的情况下返回。其次有类型JSOB => Integer []的问题
的SQL
SELECT "some_table".* FROM "some_table" WHERE (foo->'bar' @> '[1,2]'::jsonb);
滑轨范围
scope :for_bar, -> (bars) { where("foo->'bar' @> ?::jsonb", bars.to_json) }
任何解决此问题的建议。
我认为您需要的是:
bars
到JSON,array
,jsonb[]
,any
左侧的JSON值是否在顶层(@>
)包含正确的JSON路径/值条目:SomeTable.where("foo->'bar' @> ANY(ARRAY[?]::JSONB[])", [1, 2].map(&:to_json))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句