2015-01-05 4 views
6

bookshelf에 문제가 있습니다. json 유형의 열을 사용하고 싶습니다. 내 테이블에 'data'유형의 json 열이 있는데,이 열에 'team'이라는 요소가 모두 필요합니다. = '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 모델이있는 경우 Bookshelf에서 쿼리가 유사해야합니다.

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

이 희망 즐라탄이 승인과 같은
Foo.where('attr', '@>', '{"bar":"fooBar"}').fetch().then(function(rows){}); 

지금 귀하의 경우에 그것은해야합니다.

+0

동일한 쿼리를 사용하고 있지만 처리되지 않은 거부 오류 : "foo"를 선택하십시오. "attr"@ $ 1 제한 $ 2 - 연산자가 존재하지 않습니다 : json @> unknown '. – Vasanth

+0

디버그 플래그로 knex 쿼리를 실행하고 정확한 쿼리를 게시 할 수 있습니까? –