2015-01-05 2 views
6

У меня проблема с книжной полкой, я хочу использовать запрос для столбцов json type Моя таблица имеет тип данных столбцов json, я хочу получить все элементы в этой колонке «team» = 'ПСЖ'Bookshelf.js, где с колонкой json 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"}'); 

Объяснение:

Скажем, у вас есть таблица foos, где элемент foo является

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

Необработанные запрос для того что бы быть.

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

Теперь в Книжной полке, если у вас есть модель Foo, представляющая таблицу foos, она должна быть похожа.

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

Теперь для вашего случая это должно быть как

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

Надеюсь Златан утверждает это.

+0

Я использую тот же запрос, но все еще получаю ошибку «Ошибка необработанного отклонения: выберите« foo ». * From« foo », где« attr »@> $ 1 limit $ 2 - operator не существует: json @> unknown '. – Vasanth

+0

Можете ли вы запустить свой knex-запрос с флагом отладки и опубликовать свой точный запрос? –

Смежные вопросы