使用Bookshelf.js过滤postgreSQL jsonb列&书架jsonapi-PARAMS

时间:2017-11-17 13:00:29

标签: javascript postgresql bookshelf.js json-api

我使用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表格中,我有一个attributesjsonb列,其中包含各种信息:

{
    "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列?

0 个答案:

没有答案