使用 Slick 编写一个相当笨拙的 JSON 查询

Writing a rather obtuse JSON query using Slick

我希望将 SQL 查询 (Postgres) 转换为 Scala Slick 代码,以便在我的 Play 应用程序中使用。

数据看起来像这样:

parent_id | json_column
----------+-----------------------------------------
          | [ {"id": "abcde-12345", "data": "..."}
2         | , {"id": "67890-fghij", "data": "..."}
          | , {"id": "klmno-00000", "data": "..."} ]

这是我在 Postgre 中的查询SQL:

SELECT * FROM table1
WHERE id IN (
  SELECT id
  FROM
    table1 t1,
    json_array_elements(t1.json_column) e,
    json_to_record(e.value) AS r("id" text, data text)
  WHERE
    "id" = 'abcde-12345'
    AND t1.parent_id = 2
);

这找到了我需要的结果; t1 中包含 json_column 数组中的 "row" 且 ID 为 "abcde-12345" 的任何对象。 "parent_id" 和 "id" 将通过查询参数(均为字符串)传入此查询。

如何使用 Slick 在 Scala 中编写此查询?

最简单 - 也许最懒惰? - 方法可能只是使用普通 sql ..

sql"""[query]""".as[ (type1,type2..) ]

对变量使用 $var 符号。

否则您可以使用 SimpleFunction 来映射 json 调用,但我不太确定当它们每行生成多个结果时它是如何工作的。看起来可能会变得复杂..