计算从给定顶点到多重图中每个邻居的传入和传出边
Count incoming and outgoing edges from a given vertex to each neighbour in a multidigraph
我正在尝试找到一个查询,它可以让我获得一种多向图中某个顶点的传入和传出顶点的组计数。
对 V[0] 取上图,我们应该得到:
[V[0],V[1],传入:2,传出:0]
[V[0],V[2],传入:1,传出:0]
[V[0],V[3],传入:0,传出:1]
在询问有关 Gremlin 的问题时,图片和图表描述很好,但是创建一些示例数据的 Gremlin 脚本更好:
g = TinkerGraph.open().traversal()
g.addV('node').property(T.id,0).as('0').
addV('node').property(T.id,1).as('1').
addV('node').property(T.id,2).as('2').
addV('node').property(T.id,3).as('3').
addE('link').from('1').to('0').
addE('link').from('1').to('0').
addE('link').from('0').to('3').
addE('link').from('2').to('0').iterate()
这是一种方法:
gremlin> g.V(0).bothE().
......1> group().
......2> by(union(inV(),outV()).fold()).
......3> by(fold().
......4> project('incoming','outgoing').
......5> by(unfold().inV().hasId(0).count()).
......6> by(unfold().outV().hasId(0).count()))
==>[[v[0],v[1]]:[incoming:2,outgoing:0],[v[0],v[2]]:[incoming:1,outgoing:0],[v[3],v[0]]:[incoming:0,outgoing:1]]
基本上,我们 group()
每条边由其关联的 in/out 顶点(第 2 行 - 即由 union().fold()
形成的 in/out 的 List
和然后减少每个顶点对收集的边(从第 3 行开始)。 reduce 操作简单地创建一个带有 fold()
的列表,然后使用 project()
将 List
转换为带有 "incoming" 和 "outgoing" 键的 Map
-这些键的值在以下相应的 by()
调制器中定义(即展开边列表,适当地过滤顶点“0”和 count()
)。
我正在尝试找到一个查询,它可以让我获得一种多向图中某个顶点的传入和传出顶点的组计数。
对 V[0] 取上图,我们应该得到:
[V[0],V[1],传入:2,传出:0]
[V[0],V[2],传入:1,传出:0]
[V[0],V[3],传入:0,传出:1]
在询问有关 Gremlin 的问题时,图片和图表描述很好,但是创建一些示例数据的 Gremlin 脚本更好:
g = TinkerGraph.open().traversal()
g.addV('node').property(T.id,0).as('0').
addV('node').property(T.id,1).as('1').
addV('node').property(T.id,2).as('2').
addV('node').property(T.id,3).as('3').
addE('link').from('1').to('0').
addE('link').from('1').to('0').
addE('link').from('0').to('3').
addE('link').from('2').to('0').iterate()
这是一种方法:
gremlin> g.V(0).bothE().
......1> group().
......2> by(union(inV(),outV()).fold()).
......3> by(fold().
......4> project('incoming','outgoing').
......5> by(unfold().inV().hasId(0).count()).
......6> by(unfold().outV().hasId(0).count()))
==>[[v[0],v[1]]:[incoming:2,outgoing:0],[v[0],v[2]]:[incoming:1,outgoing:0],[v[3],v[0]]:[incoming:0,outgoing:1]]
基本上,我们 group()
每条边由其关联的 in/out 顶点(第 2 行 - 即由 union().fold()
形成的 in/out 的 List
和然后减少每个顶点对收集的边(从第 3 行开始)。 reduce 操作简单地创建一个带有 fold()
的列表,然后使用 project()
将 List
转换为带有 "incoming" 和 "outgoing" 键的 Map
-这些键的值在以下相应的 by()
调制器中定义(即展开边列表,适当地过滤顶点“0”和 count()
)。