【问题标题】:Postgres 9.4 jsonb queries basic operatorsPostgres 9.4 jsonb 查询基本操作符
【发布时间】:2016-05-02 08:21:20
【问题描述】:

有什么方法可以在 Postgres 中的某个表中对 jsonb 字段进行查询,这些查询对 Mongodb 查询运算符基本上是公平的(在此处列出 https://docs.mongodb.org/manual/reference/operator/query-comparison/

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

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

如果我做当前的方法

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

我得到了 power 0 和 power 146297 的行...

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

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

【问题讨论】:

  • Postgres 1.4? Seriously?
  • jsonb 从 9.4 开始支持,它一定是错字(但请更新您的问题以确保)。
  • 是的类型 - 应该是 9.4

标签: json mongodb postgresql jsonb


【解决方案1】:

你需要转换-&gt;&gt;字符串结果值:

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)

【讨论】:

    【解决方案2】:

    文档位于postgresql page。文档指出-&gt;&gt; 运算符返回字符串,你的右手操作数也是一个字符串,所以结果是正确的。

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

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

    请注意括号是必需的,以免将'power'转换为int。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多