Postgres 9.4 jsonb查询基本运算符

时间:2016-01-25 21:16:51

标签: json mongodb postgresql jsonb

有没有办法在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

2 个答案:

答案 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。