在 neo4j 中隐藏中间节点(浏览器)

Hide middle nodes in neo4j (Browser)

我的问题如下。我有以下节点关系:

(Student)-[:StudiesIn]->(Class)<-[:Teaches]-(Professor)

我正在尝试在浏览器的图形生成器上显示如下查询:

MATCH st=(a:Student)-[]-()-[]-(sir:Professor) RETURN st

这让我恢复了包括 class 在内的关系。现在我真的不关心这个特定可视化的 class,我想隐藏它。有没有办法在不实际创建(并存储在磁盘上)学生和教授之间的关系的情况下做到这一点?

我只想要这样的东西:

MATCH (a:Student)-[]-()-[]-(sir:Professor) RETURN (a)-[{name:"HasAsProfessor"}]-(sir)

但这不起作用。我还查看了 :http://grokbase.com/t/gg/neo4j/147evnv9j2/feature-request-virtual-relationships-in-result-sets 的建议如下:

MATCH (a:Student)-[]-()-[]-(sir:Professor) RETURN {start:a, rel:"CustomRel", end:sir}

但这在浏览器中不起作用(而且我没有时间从头开始重新实现图形可视化工具)

感谢您的帮助。

您可以使用来自 APOC Procedures 的虚拟关系,它们仅用于显示而不保存在数据库中:

MATCH (a:Student)-[*2]-(sir:Professor) 
RETURN a, sir, apoc.create.vRelationship(a,'HasAsProfessor',{}, sir) as rel

您可以尝试使用程序创建 virtual relationships from the APOC library:

MATCH st=(S:Student)-[:StudiesIn]->(:Class)<-[:Teaches]-(P:Professor)
WITH S, collect(distinct P) as PS
UNWIND PS as P
CALL apoc.create.vRelationship(S,'HasAsProfessor',{}, P) YIELD rel
RETURN S, rel, P

Upd:在neo4j-browser中显示是合适的简单技巧来创建和立即删除关系:

MATCH st=(S:Student)-[:StudiesIn]->(:Class)<-[:Teaches]-(P:Professor)
WITH S, collect(distinct P) as PS
UNWIND PS as P
MERGE (S)-[r:VirtualRelationHasAsProfessor]->(P)
DELETE r
RETURN S, r, P