【问题标题】:How to properly query Postgresql JSONB array of hashes on Ruby on Rails 6?如何在 Ruby on Rails 6 中正确查询 Postgresql JSONB 哈希数组?
【发布时间】:2021-07-12 14:51:41
【问题描述】:

这是我的专栏:

[
  { id: 1, value: 1, complete: true }, 
  { id: 2, value: 1, complete: false },
  { id: 3, value: 1, complete: true } 
]

首先,是否有使用 jsonb 方案的“正确”方式?我应该重新设计以使用单个 json 而不是哈希数组吗?

我在数据库中有大约 200 个条目,列状态有 200 个条目。

  • 如何执行查询以获取真/假计数?
  • 如何查询所有完整的项目?我可以查询 json 具有完整项目的数据库行,但我无法查询数据库中所有已完成的行中的所有项。

感谢帮助,谢谢

【问题讨论】:

  • all kinds of ways与之交互。
  • 您的架构似乎已修复。所以最好的办法是根本不使用 JSON,而是使用简单的关系方式。至少在处理 SQL 中的数据方面最好。
  • @tadman 如果这将是帮助,请您指出我可以在散列数组中选择到本文档的哪个位置?在问这个问题之前,我已经花了几个小时在那个文件上,又过了几个小时。也许我对此过于盲目,但我找不到。

标签: ruby-on-rails ruby postgresql jsonb


【解决方案1】:

啊哈!我在这里找到了:

https://levelup.gitconnected.com/how-to-query-a-json-array-of-objects-as-a-recordset-in-postgresql-a81acec9fbc5

假设你的数据集是这样的:

[{
  "productid": "3",
  "name": "Virtual Keyboard",
  "price": "150.00"
}, {
  "productid": "1",
  "name": "Dell 123 Laptop Computer",
  "price": "1300.00"
},
{
  "productid": "8",
  "name": "LG Ultrawide Monitor",
  "price": "190.00"
}]

正确的计算方法是这样的:

select items.name, count(*) as num from 
purchases,jsonb_to_recordset(purchases.items_purchased) as items(name text)
group by items.name
order by num Desc

工作起来就像一个魅力,而且速度非常快。 要在 Rails 中执行此操作,您需要使用 Model.find_by_sql(....) 并指出您的选择。我确信可能有更好的方法来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多