Neo4j 检索按最不具体的组分组的节点
Node4j retrieve nodes grouped by least specific group
我是 Neo4j 的新手,我需要为昨天做一些原型。我仍在考虑使用传统的关系数据库来执行此操作,除非您可以清楚地证明使用图形数据库对这个特定应用程序有多么方便。
假设我有这张图表:
B 有 parent A
C 有 parent A
D 有 parent A
E有parent B
F有parent C
G有parent C
H有parent C
我有 parent D
我需要检索当前节点 + 尽可能按最大节点组分组的 1 级。
我对节点 A 的结果:
第 1 组我的成绩:
等等...
我是从头开始,所以您的所有建议都会受到赞赏。
要对这个层次结构建模,您需要一个定义的关系类型,它允许我们挑选出什么是什么 children。所以让我们假设这样的设置:
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 层层次结构,对 children 可以是什么施加额外条件,或者将它与路径匹配,return 通过图形的路径而不是节点本身,随你喜欢。
我是 Neo4j 的新手,我需要为昨天做一些原型。我仍在考虑使用传统的关系数据库来执行此操作,除非您可以清楚地证明使用图形数据库对这个特定应用程序有多么方便。
假设我有这张图表:
B 有 parent A
C 有 parent A
D 有 parent A
E有parent B
F有parent C
G有parent C
H有parent C
我有 parent D
我需要检索当前节点 + 尽可能按最大节点组分组的 1 级。
我对节点 A 的结果:
第 1 组我的成绩:
等等...
我是从头开始,所以您的所有建议都会受到赞赏。
要对这个层次结构建模,您需要一个定义的关系类型,它允许我们挑选出什么是什么 children。所以让我们假设这样的设置:
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 层层次结构,对 children 可以是什么施加额外条件,或者将它与路径匹配,return 通过图形的路径而不是节点本身,随你喜欢。