按节点关系对节点进行分组

时间:2015-07-16 19:21:03

标签: neo4j cypher

我构建了一个节点类型和两种关系类型的简单图:IS和ISNOT。 IS关系意味着节点对属于同一个组,显然ISNOT代表不属于rel。

当我必须获取相关节点组时,我运行以下查询:

"MATCH (a:Item)-[r1:IS*1..20]-(b:Item) RETURN a,b"

所以这会返回很多a是b的结果,我添加了一些代码来将它们分组。

我想要的是将他们分组修改上面的查询,但鉴于我的菜鸟级别,我还没有想出来。我想要的是每组获得一行,如:

(node1, node3, node5)
(node2,node4,node6)
(node7,node8)

1 个答案:

答案 0 :(得分:2)

我假设你所谓的群组是nodes present in a path where all these nodes are connected with a :IS relationship

我认为这个查询就是你想要的:

MATCH p=(a:Item)-[r1:IS*1..20]-(b:Item)
RETURN nodes(p) as nodes

其中p是描述模式的路径,然后返回集合中路径中存在的所有节点。

请注意,一个简单的图表(http://console.neo4j.org/r/ukblc0):

(item1)-[:IS]-(item2)-[:IS]-(item3)

将返回6个路径,因为您在模式中使用undericted relationships,因此item1和item2之间有两条可能的路径,例如。