Neo4j - 跳跃节点

时间:2018-04-17 18:59:26

标签: neo4j

我有一个Neo4j图模型,有四(4)个节点。为简单起见,我将命名节点1-4。

(N1) - (N 2) - (N 3) - (N4)

我能否以图形方式从(n1)直接跳到(n3)而不显示(n2)?在我的数据示例中,(n1)可以有1个值,然后(n2)可以扩展为多个实体,然后所有(n2)个实体将连接到1(n3)。

我的想法是这会起作用,但它不会

MATCH(n1) - (n2) - (n3) 返回n1,n3

我得到零结果。我想知道这是否可行,或者是否有其他方式以图形方式显示结果。我可以将结果作为文本获得,但我希望以图形方式显示。

2 个答案:

答案 0 :(得分:1)

是的,绝对有可能跳过中间节点。 Neo4J当然会在图遍历中使用它们,但它不必向您显示结果。有几种方法可以做到这一点:

使用长度指定的模式匹配,当您不关心它们之间的节点时。这看起来像这样:

MATCH (n1:Label1)-[*2]-(n3:Label3) RETURN n1, n3

中间的变量路径表示要遍历两个关系以到达节点编号3,因此在N1和N2之间必须有一个节点。

您可以做的另一件事就是不要指定中间节点的任何内容:

MATCH (n1:Label1)--()--(n3:Label3) RETURN n1, n3

这类似于您发布的第二种查询形式,但第二个节点未绑定到变量。

答案 1 :(得分:1)

如果你的意思是你希望neo4j浏览器绘制一条连接n1n3的线(即使它们之间可能没有关系),是的,你可以这样做。

有APOC程序可以生成virtual nodes and relationships - 即看起来像真实节点的数据结构以及与neo4j浏览器的关系。

例如,如果您在neo4j浏览器中运行以下内容,则浏览器会在每个JUMPn1对之间显示虚拟n3关系(假设您只对Foo个节点)。数据库中并不存在虚拟关系。

MATCH (n1:Foo)--()--(n3:Foo)
CALL apoc.create.vRelationship(n1,'JUMP', {}, n3) YIELD rel
RETURN n1, n3, rel;