用rails在PG中查询数据json

问题描述 投票:0回答:1

我有一个ATable(id,value),其值类型是

json

id | value
--------------------------------------------------
1  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }
3  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [98, 56, 2] }
4  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [28345, 100, 333, 987] }

我写了

ATable.where("value->>'user_ids' LIKE ?", "%283%")

结果:

id | value
--------------------------------------------------
1  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }
4  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [28345, 100, 333, 987] }

预期结果:

id | value
--------------------------------------------------
1  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2  | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }

我尝试

ATable.where("value->>'user_ids' LIKE In (?)", "283")
但不起作用

谢谢。

ruby-on-rails pg
1个回答
0
投票

不是 PG 专家,但使用

"%283%"
的问题是它将匹配包含这些数字的任何数字。这就是返回 id 为 4 的行的原因 (28345)。

尝试将

@>
运算符与
->
结合使用:

ATable.where("value->'user_ids' @> ?", '[283]')

文档

不确定这是否应该标记为 Rails 问题,绝对不应该标记为 Ruby 问题。

© www.soinside.com 2019 - 2024. All rights reserved.