使用Neo4j官方Procedure Template调用travers.findCoActors报错求助
解决Neo4j自定义过程调用的YIELD报错问题
错误原因
Neo4j 4.x及以上版本中,调用返回结果的自定义过程时,必须显式使用YIELD指定要接收的输出字段,不能隐式处理返回结果,这就是你遇到报错的直接原因。
正确查询写法
首先需要明确你的CoActorRecord类定义的输出字段——根据代码逻辑,它是将遍历到的Node包装成CoActorRecord实例,结合官方模板的惯例,这个类通常会有一个标注@ResultField的公共字段(比如coActor或node)。假设你的CoActorRecord符合官方模板规范,定义如下:
public static class CoActorRecord { @ResultField("coActor") public final Node coActor; public CoActorRecord(Node coActor) { this.coActor = coActor; } }
对应的正确查询语句为:
MATCH (n:Person) CALL travers.findCoActors(n.name) YIELD coActor RETURN n.name AS actor, coActor AS coActorNode
如果你的CoActorRecord字段名为node,则调整为:
MATCH (n:Person) CALL travers.findCoActors(n.name) YIELD node RETURN n.name AS actor, node AS coActorNode
优化建议
- 原查询会遍历所有
Person节点并逐个调用过程,容易产生重复结果,可添加DISTINCT去重:
MATCH (n:Person) CALL travers.findCoActors(n.name) YIELD coActor RETURN DISTINCT n.name AS actor, coActor.name AS coActorName
- 若只需要查询特定演员的合作演员,可直接传入指定名称,避免遍历所有节点:
CALL travers.findCoActors("Tom Hanks") YIELD coActor RETURN coActor.name AS coActorName
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

