使用 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 调用,但我不太确定当它们每行生成多个结果时它是如何工作的。看起来可能会变得复杂..
我希望将 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 调用,但我不太确定当它们每行生成多个结果时它是如何工作的。看起来可能会变得复杂..