【问题标题】:query JSON data using slick(pg)使用 slick(pg) 查询 JSON 数据
【发布时间】:2015-01-23 04:11:44
【问题描述】:

我在 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 扩展/运算符在数组中和跨表进行查询,以便能够获取与此类查询条件匹配的所有记录?

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    我正在使用 slick 和 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      相关资源
      最近更新 更多