抱歉没有示例图。
我有一个有向非循环图映射,其中多个称为“曾祖父母”的节点具有到“祖父母”的边,“祖父母”具有到多个“父母”的边,又具有到多个“孩子”的边。
类似的东西,
greatgrandparent1 -> grandparent1 -> parent1 -> child1
greatgrandparent1 -> grandparent1 -> parent1-> child2
greatgrandparent1 -> grandparent1 -> parent2 -> child3
greatgrandparent1 -> grandparent1 -> parent2 -> child4
… 那么……
我从祖父母开始,一直走到有联系的曾祖父母。 也从祖父母到父母,然后到相连的孩子。
我需要一个返回如下所示内容的查询。
{‘greatgrandparent’: ‘greatgrandparent1’ , ‘parent’ : ‘parent1’ , ‘children’ : '['child1', 'child2', …..]'}
{‘greatgrandparent’: ‘greatgrandparent1’ , ‘parent’ : ‘parent2’ , ‘children’ : '['child3', 'child4', …..]'}
…..
….
到目前为止,我能够让每个孩子像这样单独排队,
{‘greatgrandparent’: ‘greatgrandparent1’ , ‘grandparent’ : ‘grandparent1’, ‘parent’ : ‘parent1’ , ‘children’ : ‘child1’}
{‘greatgrandparent’: ‘greatgrandparent1’ ‘grandparent’ : ‘grandparent1’, ,‘parent’ : ‘parent1’ , ‘children’ : ‘child2’}
{‘greatgrandparent’: ‘greatgrandparent1’ ‘grandparent’ : ‘grandparent1’, ‘parent’ : ‘parent2’ , ‘children’ : ‘child3’}
{‘greatgrandparent’: ‘greatgrandparent1’ ‘grandparent’ : ‘grandparent1’, ‘parent’ : ‘parent2’ , ‘children’ : ‘child4}
..
如何获取列表中的所有孩子?
我正在使用 amazon Neptune 和 gremlin_python。
g.V()
.has('grandparent', 'name', 'grandparent1’).as_(‘grandparent')
.repeat(timeLimit(1000).in()).until(hasLabel('greatgrandparent'))
.dedup().order().by('name').as_(‘greatgrandparent')
.select('grandparent').repeat(timeLimit(1000).out()).until(hasLabel(‘parent))
.dedup().order().by('name').as_(‘parent')
.repeat(timeLimit(1000).out()).until(hasLabel('children'))
.dedup().order().by('name').as_(‘children')
.select(‘greatgrandparent’,grandparent','parent', 'children').by(‘name’)
解决此问题的一种方法是研究
path
和 group
的使用。为了模拟关系(g-祖父母、祖父母、父母、孩子),我将使用航线数据集中的机场。首先让我们看一下 path
的简单用法,从 ZKE
开始,它将扮演我们曾祖父母的角色。
g.V().has('code','ZKE').
repeat(out().simplePath()).
times(3).
path().
by('code')
运行时我们得到
1 path[ZKE, YFA, YMO, YKQ]
2 path[ZKE, YFA, YMO, YTS]
为了保留这种关系,但将子项折叠到列表中,我们可以在查询中添加
group..by
。
g.V().has('code','ZKE').
repeat(out().simplePath()).
times(3).
path().
by('code').
group().
by(limit(local,3)).
by(tail(local).fold())
这给了我们
1 {('ZKE', 'YFA', 'YMO'): ['YKQ', 'YTS']}
也许使用这些构建模块您可以实现您正在寻找的结果,