Обновление шаблона и краевого порядка Gremlin с помощью Loop - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь перебрать произвольное количество ребер в вершине и назначить текущее число итераторов / петель для ребра. Как бы я поступил так?

псевдокод g.V (12345) .outE ('содержит'). цикл {через все outE содержит ребра} {__. свойство ('ordinal', it.loopCount)}

Что-то в этом роде?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Начиная с 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
0 голосов
/ 27 июня 2018

Вы можете использовать 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() в основном будет держать счетчик циклов, и вы можете присвоить его своему ребру.

...