Node4j检索按最少特定组分组的节点

时间:2017-09-09 15:17:44

标签: neo4j graph-databases

我是Neo4j的新手,我需要为昨天制作原型。我还在考虑使用传统的关系数据库来做这件事,除非你能清楚地证明使用图表数据库对这个特定应用程序的方便性。

假设我有这张图表:
Graph example

B有父母A
C有父A D有父母A
E有父B F有父母C
G有父母C
H有父母C
我有父母D

我需要检索由最大节点组分组的当前节点+ 1级别。

节点A的结果:
A result

我对第1组的结果:
Group 1 result

等等......

我从头开始,所以您的所有建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

要对此层次结构建模,您需要一个已定义的关系类型,以便我们选择什么是子代。所以让我们假设一个这样的设置:

CREATE (a:Node { name: 'a' }), (b:Node { name: 'b' }), 
       (c:Node { name: 'c' }), (d:Node { name: 'd' }),
       (e:Node { name: 'e' }), (f:Node { name: 'f' }), 
       (g:Node { name: 'g' }), (h:Node { name: 'h' }),
       (i:Node { name: 'i' }),
       (a)-[:child]->(b), (a)-[:child]->(c);
/* And so on for all relationships */

查询组是一个非常直接的过程,只需遍历:child链接,如下所示:

MATCH (a:Node { name: 'a' })-[:child*]->(groupMember:Node)
RETURN groupMember;

这里的魔力只是*,它允许您匹配任意数量的关系跳跃。只要您的图形没有循环,这将始终为您提供层次结构中的完整后代节点集。

你可以从那里得到相当的幻想 - 将路径长度限制为仅获取n级层次结构,对子级可以提供额外条件,或者将其与路径匹配并返回通过图形的路径而不是节点本身,无论你喜欢什么。