我是Neo4j的新手,我需要为昨天制作原型。我还在考虑使用传统的关系数据库来做这件事,除非你能清楚地证明使用图表数据库对这个特定应用程序的方便性。
B有父母A
C有父A
D有父母A
E有父B
F有父母C
G有父母C
H有父母C
我有父母D
我需要检索由最大节点组分组的当前节点+ 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级层次结构,对子级可以提供额外条件,或者将其与路径匹配并返回通过图形的路径而不是节点本身,无论你喜欢什么。