我有一张桌子transactions
id | bigint | NOT NULL DEFAULT nextval('transactions_id_seq'::regclass)
transaction_id | bigint | NOT NULL
middleware_id | text |
opname | optype | NOT NULL
created_at | timestamp without time zone | NOT NULL
finished_at | timestamp without time zone |
request | jsonb | NOT NULL
answer | jsonb |
其中请求可以包含以下数据:
{ plugin_id: string, item_src_id: string, item_dst_id: string, payload: {}}
或
{ plugin_id: string, item_id: string, payload: {}}
我可以使用纯 SQL 为某些item_id
类似的事务选择事务列表:
SELECT id, request
FROM transactions
WHERE 'BEX456'
IN (request->>'item_id', request->>'item_src_id', request->>'item_dst_id')
但是,当我将该请求与 Sequel 一起使用时,它会警告我
后续弃用警告:不推荐使用具有多个参数或第一个参数/元素是字符串的数组调用数据集过滤方法,并将在 Sequel 5 中删除。
对于该请求:
$db[:transactions].
where("? IN (request->>'item_id', request->>'item_src_id', request->>'item_dst_id')", data[:item_id]).all
我可以Sequel.lit
在 where 操作中使用该字符串,但我的问题是 -我可以使用本机 Sequel 运算符在字段内选择 json吗?
这对我有用:
$db[:transactions].where(
data[:item_id] => [
Sequel.lit("request->>'item_id'"),
Sequel.lit("request->>'item_dst_id'"),
Sequel.lit("request->>'item_src_id'") ] ).first