我正在尝试遍历顶点上任意数量的边,并将当前的迭代器/循环计数分配给边。我将如何去做?
伪代码 g.V(12345).outE('contains')。loop {通过所有outE包含边} {__。property('ordinal',it.loopCount)}
类似的东西吗?
答案 0 :(得分:1)
您可以使用sack()
完成此操作。例如,我将使用TinkerPop随附的“现代”玩具图:
gremlin> g.withSack(0).V(1).
......1> repeat(outE().
......2> sack(sum).
......3> by(constant(1)).
......4> property('loops',sack()).
......5> inV())
gremlin> g.V(1).outE().valueMap()
==>[weight:0.4,loops:1]
==>[weight:0.5,loops:1]
==>[weight:1.0,loops:1]
gremlin> g.V(1).outE().inV().outE().valueMap()
==>[weight:1.0,loops:2]
==>[weight:0.4,loops:2]
因此sack()
基本上将保留循环计数,您可以将其分配给边缘。
答案 1 :(得分:1)
以1
开头:
gremlin> g.V(1).outE().
groupCount("x").
by(constant("c")).
property("ordinal", select("x").select("c")).iterate()
gremlin> g.V(1).outE().valueMap(true)
==>[id:9,weight:0.4,ordinal:1,label:created]
==>[id:7,weight:0.5,ordinal:2,label:knows]
==>[id:8,weight:1.0,ordinal:3,label:knows]
要从0
开始,您需要做一些额外的工作:
gremlin> g.withSideEffect("x", ["c": 0L]).V(1).outE().
property("ordinal", select("x").select("c")).
groupCount("x").
by(constant("c")).iterate()
gremlin> g.V(1).outE().valueMap(true)
==>[id:9,weight:0.4,ordinal:0,label:created]
==>[id:7,weight:0.5,ordinal:1,label:knows]
==>[id:8,weight:1.0,ordinal:2,label:knows