使用 Gremlin 遍历树的叶子时查找每个节点的子节点
Finding the children of each and every node while traversing upto the leaves of the tree using Gremlin
假设我有一棵像
这样的树
现在盯着顶点8
,我想找到顶点8
的子节点,即{3,10},将它们存储在map中并再次对剩余的顶点继续相同的过程,直到我到达叶节点(编写查询时树的高度未知)。
我想编写一个将执行上述操作的查询,并且应该 return 一个 Iterator 包含这些 maps。
请帮我写这个查询。
您可以考虑 tree 步骤:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> t=new Tree();g.v(1).out.tree(t).loop(2){true}
gremlin> t
==>v[1]={v[2]={}, v[3]={}, v[4]={}}
==>v[4]={v[3]={}, v[5]={}}
我没有完全按照您问题的预期格式部分进行操作,因此我不确定以上内容是否完全符合您的要求。您可能会根据需要使用一些 groovy 从那里转换 t
,因为它可以立即完成大部分工作。
在 GremlinPipeLine 中执行相同的查询
Tree tree = new Tree();
new GremlinPipeline(graph).V().has("mgrNo", 814754).out("manager of").tree(tree).loop(2, new PipeFunction<LoopBundle,Boolean>() {
@Override
public Boolean compute(LoopBundle loopBundle) {
return true;
}
}).iterate();
Iterator it = tree.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
}
}
假设我有一棵像
现在盯着顶点8
,我想找到顶点8
的子节点,即{3,10},将它们存储在map中并再次对剩余的顶点继续相同的过程,直到我到达叶节点(编写查询时树的高度未知)。
我想编写一个将执行上述操作的查询,并且应该 return 一个 Iterator 包含这些 maps。 请帮我写这个查询。
您可以考虑 tree 步骤:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> t=new Tree();g.v(1).out.tree(t).loop(2){true}
gremlin> t
==>v[1]={v[2]={}, v[3]={}, v[4]={}}
==>v[4]={v[3]={}, v[5]={}}
我没有完全按照您问题的预期格式部分进行操作,因此我不确定以上内容是否完全符合您的要求。您可能会根据需要使用一些 groovy 从那里转换 t
,因为它可以立即完成大部分工作。
在 GremlinPipeLine 中执行相同的查询
Tree tree = new Tree();
new GremlinPipeline(graph).V().has("mgrNo", 814754).out("manager of").tree(tree).loop(2, new PipeFunction<LoopBundle,Boolean>() {
@Override
public Boolean compute(LoopBundle loopBundle) {
return true;
}
}).iterate();
Iterator it = tree.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
}
}