2016-01-25 47 views
0

有沒有什麼辦法讓查詢在某些表中的jsonb領域的Postgres是基本公平的MongoDB的查詢操作符(在這裏列出https://docs.mongodb.org/manual/reference/operator/query-comparison/的Postgres 9.4 jsonb查詢基礎運營商

我想能夠存儲在一個Postgres的表中的一些JSON對象,例如:

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

如果我做的

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

當前的方法我得到retured兩行的電源0和電源146297 ...

有一些文件的地方,指定該怎麼辦

GT,GTE,LT,LTE,EQ,不等於在陣,而不是在陣列

+0

Postgres 1.4? [嚴重嗎?](http://www.postgresql.org/support/versioning/) –

+0

從9.4開始支持'jsonb',它肯定是一個錯字(但請更新您的問題以確保)。 – pozs

+0

是的類型 - 應該是9.4 –

回答

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

該文檔位於postgresql page。該文檔指出->>運算符返回字符串,您的右手操作數也是一個字符串,因此結果是正確的。

做你想做的事,你必須轉換從JSON返回整數的結果是什麼:

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

請注意括號需要不區分「權力」爲int。