Return gremlin 路径经过过滤、切片和切块后的特定属性
Return specific properties from a gremlin path after it has already been filtered, sliced, and diced
给定以下数据集:
g = TinkerGraph.open().traversal()
g.addV('UserJourney').property(id, 'Jeremy/Morn').
addV('UserJourney').property(id, 'Jeremy/Eve').
addV('UserJourney').property(id, 'Doug/Morn').
addV('JourneyStep').property(id, 'Watches').
addV('JourneyStep').property(id, 'TV').
addV('JourneyStep').property(id, 'Eats').
addV('JourneyStep').property(id, 'Eggs').
addV('JourneyStep').property(id, 'Toast').
addV('JourneyEnd').property(id, 'JourneyEnd').
addE('Jeremy/Morn').from(V('Eats')).to(V('Eggs')).
property('duration', 40).
addE('Jeremy/Morn').from(V('Eggs')).to(V('JourneyEnd')).
property('duration', 35).
addE('firstStep').from(V('Jeremy/Morn')).to(V('Eats')).
property('duration', 30).
addE('Jeremy/Eve').from(V('Eats')).to(V('Toast')).
property('duration', 25).
addE('Jeremy/Eve').from(V('Toast')).to(V('JourneyEnd')).
property('duration', 20).
addE('firstStep').from(V('Jeremy/Eve')).to(V('Eats')).
property('duration', 15).
addE('Doug/Morn').from(V('Watches')).to(V('TV')).
addE('Doug/Morn').from(V('TV')).to(V('Eats')).
addE('Doug/Morn').from(V('Eats')).to(V('Toast')).
addE('Doug/Morn').from(V('Toast')).to(V('JourneyEnd')).
addE('firstStep').from(V('Doug/Morn')).to(V('Watches')).
iterate()
我想return每次旅行所走的路径(Jeremy/Morn、Jeremy/Eve、Doug/Morn)以及每条路径的持续时间。除了每条路径的总持续时间(成本),我还想知道路径上每一步的持续时间(成本)。然后我想按总重量排序旅程,return 前 10。
到目前为止我的代码如下:
g.V().hasLabel('UserJourney').as('a').out('firstStep').as('b').
repeat('r1', outE().where(eq('a')).by(label).by(id).inV()).
until(loops('r1').is(50).or().hasLabel('JourneyEnd').or().cyclicPath()).
path().
from('b').as('p').
map(unfold().coalesce(values('duration'),
constant(0.0)).sum()).as('cost').
select('cost','p').
group().by(project('k').by(select('a'))).unfold().select(values).tail(local).
order().by('cost', desc).
limit(10)
==>[cost:75.0,p:[v[Eats],e[0][Eats-Jeremy/Morn->Eggs],v[Eggs],e[1][Eggs-Jeremy/Morn->JourneyEnd],v[JourneyEnd]]]
==>[cost:45.0,p:[v[Eats],e[3][Eats-Jeremy/Eve->Toast],v[Toast],e[4][Toast-Jeremy/Eve->JourneyEnd],v[JourneyEnd]]]
==>[cost:0.0,p:[v[Watches],e[6][Watches-Doug/Morn->TV],v[TV],e[7][TV-Doug/Morn->Eats],v[Eats],e[8][Eats-Doug/Morn->Toast],v[Toast],e[9][Toast-Doug/Morn->JourneyEnd],v[JourneyEnd]]]
这行得通,但是在 javascript 的结果集中,我只得到边和顶点的 ID 和标签。我需要标签、ID,至少还有持续时间。
提前感谢您的帮助
将 path
步骤更改为具有一些 by
调制器允许距离位于路径中,然后稍后从中选择。
gremlin> g.V().
......1> hasLabel('UserJourney').as('a').
......2> out('firstStep').as('b').
......3> repeat('r1', outE().where(eq('a')).by(label).by(id).inV()).
......4> until(
......5> loops('r1').is(50).or().hasLabel('JourneyEnd').or().cyclicPath()).
......6> path().from('b').as('p').
......7> by().
......8> by(valueMap(true,'duration')).
......9> map(unfold().coalesce(select('duration'), constant(0.0)).sum()).
.....10> as('cost').
.....11> select('cost', 'p').
.....12> group().by(project('k').by(select('a'))).
.....13> unfold().
.....14> select(values).
.....15> tail(local).
.....16> order().by('cost', desc).
.....17> limit(10)
==>[cost:75.0,p:[v[Eats],[id:0,label:Jeremy/Morn,duration:40],v[Eggs],[id:1,label:Je
remy/Morn,duration:35],v[JourneyEnd]]]
==>[cost:45.0,p:[v[Eats],[id:3,label:Jeremy/Eve,duration:25],v[Toast],[id:4,label:Je
remy/Eve,duration:20],v[JourneyEnd]]]
==>[cost:0.0,p:[v[Watches],[id:6,label:Doug/Morn],v[TV],[id:7,label:Doug/Morn],v[Eat
s],[id:8,label:Doug/Morn],v[Toast],[id:9,label:Doug/Morn],v[JourneyEnd]]]
给定以下数据集:
g = TinkerGraph.open().traversal()
g.addV('UserJourney').property(id, 'Jeremy/Morn').
addV('UserJourney').property(id, 'Jeremy/Eve').
addV('UserJourney').property(id, 'Doug/Morn').
addV('JourneyStep').property(id, 'Watches').
addV('JourneyStep').property(id, 'TV').
addV('JourneyStep').property(id, 'Eats').
addV('JourneyStep').property(id, 'Eggs').
addV('JourneyStep').property(id, 'Toast').
addV('JourneyEnd').property(id, 'JourneyEnd').
addE('Jeremy/Morn').from(V('Eats')).to(V('Eggs')).
property('duration', 40).
addE('Jeremy/Morn').from(V('Eggs')).to(V('JourneyEnd')).
property('duration', 35).
addE('firstStep').from(V('Jeremy/Morn')).to(V('Eats')).
property('duration', 30).
addE('Jeremy/Eve').from(V('Eats')).to(V('Toast')).
property('duration', 25).
addE('Jeremy/Eve').from(V('Toast')).to(V('JourneyEnd')).
property('duration', 20).
addE('firstStep').from(V('Jeremy/Eve')).to(V('Eats')).
property('duration', 15).
addE('Doug/Morn').from(V('Watches')).to(V('TV')).
addE('Doug/Morn').from(V('TV')).to(V('Eats')).
addE('Doug/Morn').from(V('Eats')).to(V('Toast')).
addE('Doug/Morn').from(V('Toast')).to(V('JourneyEnd')).
addE('firstStep').from(V('Doug/Morn')).to(V('Watches')).
iterate()
我想return每次旅行所走的路径(Jeremy/Morn、Jeremy/Eve、Doug/Morn)以及每条路径的持续时间。除了每条路径的总持续时间(成本),我还想知道路径上每一步的持续时间(成本)。然后我想按总重量排序旅程,return 前 10。
到目前为止我的代码如下:
g.V().hasLabel('UserJourney').as('a').out('firstStep').as('b').
repeat('r1', outE().where(eq('a')).by(label).by(id).inV()).
until(loops('r1').is(50).or().hasLabel('JourneyEnd').or().cyclicPath()).
path().
from('b').as('p').
map(unfold().coalesce(values('duration'),
constant(0.0)).sum()).as('cost').
select('cost','p').
group().by(project('k').by(select('a'))).unfold().select(values).tail(local).
order().by('cost', desc).
limit(10)
==>[cost:75.0,p:[v[Eats],e[0][Eats-Jeremy/Morn->Eggs],v[Eggs],e[1][Eggs-Jeremy/Morn->JourneyEnd],v[JourneyEnd]]]
==>[cost:45.0,p:[v[Eats],e[3][Eats-Jeremy/Eve->Toast],v[Toast],e[4][Toast-Jeremy/Eve->JourneyEnd],v[JourneyEnd]]]
==>[cost:0.0,p:[v[Watches],e[6][Watches-Doug/Morn->TV],v[TV],e[7][TV-Doug/Morn->Eats],v[Eats],e[8][Eats-Doug/Morn->Toast],v[Toast],e[9][Toast-Doug/Morn->JourneyEnd],v[JourneyEnd]]]
这行得通,但是在 javascript 的结果集中,我只得到边和顶点的 ID 和标签。我需要标签、ID,至少还有持续时间。
提前感谢您的帮助
将 path
步骤更改为具有一些 by
调制器允许距离位于路径中,然后稍后从中选择。
gremlin> g.V().
......1> hasLabel('UserJourney').as('a').
......2> out('firstStep').as('b').
......3> repeat('r1', outE().where(eq('a')).by(label).by(id).inV()).
......4> until(
......5> loops('r1').is(50).or().hasLabel('JourneyEnd').or().cyclicPath()).
......6> path().from('b').as('p').
......7> by().
......8> by(valueMap(true,'duration')).
......9> map(unfold().coalesce(select('duration'), constant(0.0)).sum()).
.....10> as('cost').
.....11> select('cost', 'p').
.....12> group().by(project('k').by(select('a'))).
.....13> unfold().
.....14> select(values).
.....15> tail(local).
.....16> order().by('cost', desc).
.....17> limit(10)
==>[cost:75.0,p:[v[Eats],[id:0,label:Jeremy/Morn,duration:40],v[Eggs],[id:1,label:Je
remy/Morn,duration:35],v[JourneyEnd]]]
==>[cost:45.0,p:[v[Eats],[id:3,label:Jeremy/Eve,duration:25],v[Toast],[id:4,label:Je
remy/Eve,duration:20],v[JourneyEnd]]]
==>[cost:0.0,p:[v[Watches],[id:6,label:Doug/Morn],v[TV],[id:7,label:Doug/Morn],v[Eat
s],[id:8,label:Doug/Morn],v[Toast],[id:9,label:Doug/Morn],v[JourneyEnd]]]