Postgres 9.4 jsonb 查询基本运算符

Postgres 9.4 jsonb queries basic operators

有什么方法可以查询 Postgres 中某些 table 中的 jsonb 字段,这些字段基本上等于 table 到 Mongodb 查询运算符(列出这里 https://docs.mongodb.org/manual/reference/operator/query-comparison/)

我希望能够在 postgres table 中存储一些 json 对象,例如:

{"power": 200},
{"power": 400},
{"power": 0},
{"power": 146297},

如果我按照现在的方法

SELECT * FROM mytable where json_field ->> 'power' < '2';

我得到了功率 0 和功率 146297 的行...

是否有一些文档说明了如何做

gt, gte, lt, lte, eq, 不等于,在数组中,不在数组中

您需要转换 ->> 个字符串结果值:

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)

文档在 postgresql page 上。文档指出 ->> 运算符 returns 字符串,您的右手操作数也是一个字符串,因此结果是正确的。

要完成您想做的事,您必须将从 json 返回的结果转换为整数:

SELECT * FROM mytable where (json_field ->> 'power')::int < '2';

请注意括号是必需的,因为 'power' 不是整数。