如何在neo4j中检索相关节点组的表?

时间:2013-10-31 23:16:12

标签: neo4j

我在neo4j中有一个看起来像这样的数据集:

(a)-[similar_to]->(b)

每个节点都有一个名为“id”的属性,该属性是唯一的。在以下示例数据集中,每个“a”节点与每个“b”节点具有“similar_to”关系:

a.id  b.id
1     5
1     2
2     13
3     12

这是拓扑的样子:

graph topology image

我想要做的是检索连接的两组节点的表格,结果如下:

1, 2, 5, 13
3, 12

到目前为止,我能用Cypher做的最好的事情是:

MATCH (a)-[r:similar_to*]-(b)
RETURN collect(distinct a.id)

但是,输出的目的是打印一行上的所有节点:

5, 1, 2, 3, 12, 13

我已尝试过此查询的各种排列,但仍然失败。我在论坛上搜索了'subgraph'和'neo4j',但无法找到合适的解决方案。任何方向/想法都将受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:2)

我的理解是你想要每个根节点“a”和所有与“a”具有直接/间接关系[:similar_to]的节点的组,如果是这样的话,试试这个,

MATCH (a)-[r:similar_to*]->(b)
Where not(a<-[:similar_to]-())
RETURN a, collect(distinct b.id) as group

“WHERE”子句将节点“a”限制为每个组的根节点。 “RETURN”子句通过根节点“a”对匹配路径上的所有节点进行分组。

如果要在组中包含每个根“a”,只需将路径更改为

即可
(a)-[r:similar_to*0..]->(b)