【问题标题】:Querying on Json data type in postgres Rails-4在 postgres Rails-4 中查询 Json 数据类型
【发布时间】:2014-04-10 15:33:59
【问题描述】:

我正在使用 Rails-4,有一个 Product 模型和存储的规格作为 JSon 类型

在迁移文件中,添加 add_column :products, :specifications, :json

示例产品记录是这样的

#<Product id: 1, prod_id: 525141, cat_id: 6716, category_id: 5, updated: "2013-09-24 07:37:20", created_at: "2014-03-07 12:21:34", updated_at: "2014-03-07 12:32:36", eans: ["4016032274001"], skus: ["DK-1511-010F/WH"], account_id: 2, specifications: {"network"=>["PCI-Express 2.1 16x", "CardBus", "PCI-Express 3.0 16x", "PCI 64-bit, 66MHz", "PCI 64-bit, 33MHz", "PCI 32-bit, 66MHz", "PCI 3.0", "PCI 2.3", "PCI 2.2", "PCI-X", "PCI-Express 16x", "PCI-Express 8x", "PCI-Express 4x", "PCI-Express 2.0 16x", "PCI-Express 1x", "PCI", "PC Card", "ISA", "AGP 8x", "AGP 4x", "AGP 2x", "AGP 1x"], "rating"=>[4]}>

我想查询产品的规格。例如:获取所有等级(规格内)等于4的产品。

是否有任何 gem 可用于实现这一点?

【问题讨论】:

  • 使用 Serian gem - 手动实现。计划移动弹性搜索而不是手动搜索。

标签: ruby postgresql ruby-on-rails-4 postgresql-9.2 hstore


【解决方案1】:

随着带有 Postgres 9.4 的 Rails 4.2 中 jsonb 的出现,如果评级字段是字符串而不是整数,则可以执行此操作。下面是一个例子。

Dynamic.create(payload: {"rating"=>['4']})
Dynamic.create(payload: {"rating"=>['3']})
Dynamic.where("payload -> 'rating' ? '4'").count

这将为您提供正确的记录。您必须将 json 字段更新为 jsonb。您可以按照我的回复here 来执行此操作。

您可以了解有关如何使用jsonb in Rails 4.2 here 的更多信息。

【讨论】:

    【解决方案2】:

    是的,通过这个 Gem 在 Rails 中实现了 JSONQuery:https://github.com/jcoglan/siren

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2023-03-03
      • 2015-07-04
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2013-06-21
      • 2018-04-13
      • 2016-10-07
      相关资源
      最近更新 更多