将 Cypher 结果与 APOC SQL 查询相结合



我正在尝试更新在虚拟环境中运行的PostgreSQL数据库的节点属性。我正在构建一个 Jazz 知识库,并希望使用 APOC 使用节点 ID 从 PSQL 数据库中查询其他属性。

我尝试展开 id 并使用它们使用 APOC 运行 SQL 语句。

这是我到目前为止尝试过的代码:

MATCH (a:Artist)
WHERE a.genre = 'jazz'
WITH COLLECT(a.mbid) AS ids
UNWIND ids AS id
CALL apoc.load.jdbc('myDB',
"select DISTINCT a.gid, ar.name as country FROM artist a INNER JOIN area ar on a.area = ar.id WHERE a.gid = ?", [id]) YIELD row
MATCH (a:Artist) WHERE a.mbid = row.gid SET a.country = row.country
RETURN COUNT(a.country)

我遇到一个错误,说"错误:运算符不存在:uuid =字符变化"。是否有任何方法可以使用 Cypher 查询中的 id 通过带有 APOC 的单个 SQL 语句单独更新每个节点?

假设gid列是Postgres数据库中的UUID类型,并且错误发生在通过apoc.load.jdbc执行查询时,则SQL中ID的以下显式强制转换至少应该具有比较工作,并让查询返回可以比较的字符串值:

MATCH (a:Artist)
WHERE a.genre = 'jazz'
WITH COLLECT(a.mbid) AS ids
UNWIND ids AS id
CALL apoc.load.jdbc('myDB',
"select DISTINCT a.gid::text, ar.name as country FROM artist a INNER JOIN area ar on a.area = ar.id WHERE a.gid = UUID(?)", [id]) YIELD row
MATCH (a:Artist) WHERE a.mbid = row.gid SET a.country = row.country
RETURN COUNT(a.country)

最新更新