有没有办法在Postgres的某个表中的jsonb字段上进行查询,这些表基本上对Mongodb查询运算符是公平的(在此列出https://docs.mongodb.org/manual/reference/operator/query-comparison/)
我希望能够在postgres表中存储一些json对象,例如:
{"power": 200},
{"power": 400},
{"power": 0},
{"power": 146297},
如果我使用
的当前方法SELECT * FROM mytable where json_field ->> 'power' < '2';
我得到了电源0和电源146297的行......
是否有某些文档指定了如何操作
gt,gte,lt,lte,eq,not equal,in array,not in array
答案 0 :(得分:2)
您需要转换->>
字符串结果值:
WITH mytable(json_field) AS ( VALUES
('{"power": 200}'::JSONB),
('{"power": 400}'::JSONB),
('{"power": 0}'::JSONB),
('{"power": 146297}'::JSONB)
)
SELECT * FROM mytable where (json_field->>'power')::INTEGER < 2;
结果是:
json_field
--------------
{"power": 0}
(1 row)
答案 1 :(得分:1)
文档位于postgresql page。文档说明->>
运算符返回字符串,右手操作数也是字符串,结果是正确的。
要执行您想要执行的操作,必须将从json返回的结果转换为integer:
SELECT * FROM mytable where (json_field ->> 'power')::int < '2';
请注意,需要使用括号,以免出现“电源”这样的情况。到int。