Поиск всех записей, которые имеют определенное значение, с учетом регистра в поле массива JSONB - PullRequest
0 голосов
/ 30 апреля 2018

Я использую базу данных postgres и пытаюсь запросить все записи со значением «Значение» => «Черный» в этом поле JSONB. Это поле содержит массив объектов, например, {"id" => "1", "key" => "size", "value" => "P"}

Как мне запросить (без учета регистра) эти записи?

Пока это мой код

def by_feature_value(value)
  relation.where('features @> ?', [{ value: value }].to_json)
end

Отчеты

#<ProductSku:0x000055de9cc01ba8
  id: 33,
  product_id: 3,
  code: "1234",
  ean: "12345",
  created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
  updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
  features: [{"id"=>"2", "key"=>"Color", "Value"=>"Black"}]>

#<ProductSku:0x000055de9cc01ba8
  id: 33,
  product_id: 3,
  code: "1234",
  ean: "12345",
  created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
  updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
  features: [{"id"=>"2", "key"=>"Color", "Value"=>"black"}]>,

1 Ответ

0 голосов
/ 30 апреля 2018

Правильный ответ на этот вопрос

ProductSku.where('lower(features::text)::jsonb @> lower(?)::jsonb', [{ Value: value }].to_json)

Без приведения типов первый комментарий к вашему посту не работает.

...