2015-01-05 14 views
6

Bookshelfに問題があります。カラムにjsonタイプのカラムを使用したい 私のテーブルには 'data'タイプのjsonカラムがあります。 'PSG'Bookshelf.js where json column Postgresql

I試験:

collection.query('whereRaw', "data->'team'->>'PSG'"); 

私はこのエラー

"argument of WHERE must be type boolean, not type text"

または私は

をテストに持っています
collection.query('where', "data", "#>", "'{team, PSG}'"); 

私はとの報告書を持っている

"The operator \"#>\" is not permitted"

は、私が思うにこのエラーを持っているhttps://github.com/tgriesser/bookshelf/issues/550

答えて

4

短い答え:

collection.query('where', 'data', '@>', '{"team": "PSG"}'); 

説明:

は、あなたが要素fooは、そのための生のクエリは次のようになります

------------------------ 
| id | attr    | 
------------------------ 
| 0 |{ "bar": "fooBar"} | 
------------------------ 
| 1 |{ "bar": "fooFoo"} | 
------------------------ 

あるテーブルfoosを、持っていると言います。

select * from "foos" where "attr" @> '{"bar":"fooBar"}'; 

テーブルフオを表すモデルFooがあれば、ブックシェルフにはクエリーがあります。

Foo.where('attr', '@>', '{"bar":"fooBar"}').fetch().then(function(rows){}); 

は、今すぐあなたのケースのためにそれがうまくいけば、ズラタンはそれを承認

collection.query('where', 'data', '@>', '{"team": "PSG"}'); 

ようにする必要があります。

+0

私は同じクエリを使用していますが、未処理の拒否エラー: "foo"を選択しています。 "attr" @ $ 1の上限$ 2 - 演算子が存在しません:json @> unknown '。 – Vasanth

+0

knexクエリをデバッグフラグで実行し、正確なクエリを投稿してください。 –

関連する問題