我使用Bookshelf.js作为我的ORM设置了一个带有Node.js后端的postgreSQL数据库。我的模特是:
const Maintenance = Bookshelf.Model.extend({
tableName: 'maintenances',
}, {
jsonColumns: ['attributes']
});
我正在使用bookshelf-jsonapi-params
插件使用fetchJsonApi
方法返回我的结果,如下所示:
bookshelf
.Maintenance
.fetchJsonApi(req.jsonAPI, true)
.then(...)
在我的maintenances
表格中,我有一个attributes
类jsonb
列,其中包含各种信息:
{
"type": "maintenances",
"id": "129",
...
"attributes": {
"date": "2017-11-17T00:00:00.000Z",
...
"type": "normal",
"attributes": {
"status": {
"id": "in-progress",
"label": "In progress"
}
}
}
我在这里想要实现的是搜索/过滤该列中包含的数据。我尝试了很多查询,例如:
/maintenances?filter[like][attributes]=in-progress
--- which results in --->
error: select "maintenances".* from "maintenances" where (LOWER("maintenances"."attributes") like LOWER($1)) - function lower(jsonb) does not exist
甚至:
/maintenances?filter[attributes]={"status":{"id":"in-progress"\\,"label":"In Progress"}"
--- which results in --->
select "maintenances".* from "maintenances" where "maintenances"."attributes" in ($1) - invalid input syntax for type json
通过浏览bookshelf.js,bookshelf-jsonapi-params和postgreSQL上的文档/问题,我的理解是它不起作用,因为postgreSQL根本不处理jsonb或其他之间的=
比较非json运营商。我的问题是:是否有一种方法可以使用该设置过滤jsonb列?