gpt4 book ai didi

ruby-on-rails - Json 的 Active Record 查询数组

转载 作者:行者123 更新时间:2023-12-04 09:59:15 25 4
gpt4 key购买 nike

我的数据库中有一个 json 列(是一个对象数组),其中包含许多 类别 与这样的产品相关:

[
{
"id": 1,
"name": "Category X"
},
{
"id": 2,
"name": "Category Y"
},
...
]

我需要将以下 PostgreSQL 查询转换为事件记录查询:
SELECT * FROM products p, json_array_elements(p.category) as data
WHERE data ->>'name' = 'Sport';

我尝试过的一些查询:

sports = Product.where("category ->>'name' = ?", "Sport")

它返回一个空数组(这是错误的,因为我的数据库中有运动类别的记录)

sports = Product.where("category @> ?", [{name: "Sport"}])

其中引发: TypeError: can't quote Hash
sports = Product.where("category @> ?","{name: 'Sport'}")

其中引发: ERROR: operator does not exist: json @> unknown和提示: No operator matches the given name and argument type(s). You might need to add explicit type casts.
所以我试过:

sports = Product.where("category @> ?", "[{'name': 'Sport'}]")



sports = Product.where("category @> ?", "[{'name': 'Sport'}]".to_json)

和其他一些查询都没有成功。

这些链接:
PostgreSQL functions-json
active record querying
没有多大帮助。

最佳答案

您收到 PG::UndefinedFunction: 的原因异常(“运算符不存在:json @> 未知”)是因为 @> 运算符旨在用于 jsonb 数据类型列,而您的 products.category列不是。

为此,您可以;或更新 category 的数据类型列,或者在执行查询时显式转换列:

Product.where('category::jsonb @> ?', [{ name: 'Sport' }].to_json)

这个:
Product.where("category @> ?", "[{'name': 'Sport'}]")

不会起作用,因为它不是有效的语法。

关于ruby-on-rails - Json 的 Active Record 查询数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com