使用光滑查询JSON数据(pg)

时间:2015-01-23 04:11:45

标签: scala slick

我在postgresql数据库中的列类型json中存储了以下JSON数组。

为了将查询写入"查找实例url为/ api / mydef / definitions / 3和rel=parent

的所有记录
"links":[
    {
    "dsId": 2,
    "instance": "/api/mydef/definitions/3",
    "rel": "parent"
    }
  ]

在Scala,Slick,Play环境中使用slickpg。尝试编写如下查询

 sourceInstance.filter { _.links.+>>("instance") === "/api/mydef/definitions/3" }.filter { _.links.+>>("rel") === "parent" }

但是它给了我postgresql错误:org.postgresql.util.PSQLException: ERROR: cannot extract field from a non-object

如何在数组和表中使用slickpg扩展名/运算符进行查询,以便能够获得符合此类查询条件的所有记录?

1 个答案:

答案 0 :(得分:1)

使用光滑的postgresql 9.3,我正在使用

val jsonSQL=SimpleFunction.binary[Option[String],String,Option[String]]("json_extract_path_text")

这样这个jsonSQL函数可以用来提取json树中的文本。例如,复杂的光滑连接:

val destTable = for {
(b,d) <- (__Ttable filter (_.xx === "foo")) 
join ( __Ltable filter (_.yy === "bar")) 
on ((a,b) => jsonSQL(a.qualifier,"JSONPATH") === b.name)
} yield (b.Id,b.d,d.id)