所以,假设我有这样的数据。
(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:6)->(id:9)->(id:10)
(id:5)->(id:7)->(id:8)->(id:6)
要清楚,Id 5是具有2条边的相同节点。
以下是代码示例:
g.addV('person').property('id',1).as('1').
addV('person').property('id',2).as('2').
addV('person').property('id',3).as('3').
addV('person').property('id',4).as('4').
addV('person').property('id',5).as('5').
addV('person').property('id',6).as('6').
addV('person').property('id',7).as('7').
addV('person').property('id',8).as('8').
addV('person').property('id',9).as('9').
addV('person').property('id',10).as('10').
addE('connection').from('1').to('2').
addE('connection').from('2').to('3').
addE('connection').from('3').to('4').
addE('connection').from('4').to('5').
addE('connection').from('5').to('6').
addE('connection').from('6').to('9').
addE('connection').from('9').to('10').
addE('connection').from('5').to('7').
addE('connection').from('7').to('8').
addE('connection').from('8').to('6').iterate()
我需要遍历图表,并将6在任何方向上连接的任何节点排除在5.所以我会回来:
(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:6)
(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:7)->(id:8)->(id:6)
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,但是当你看到一个你遇到顶点6并且顶点6有一个边缘到顶点5的模式时,听起来你想要停止遍历 - 如果是这样那么这里是一种方法:
gremlin> g.V().has('id',1).
......1> repeat(both().simplePath()).
......2> until(and(has('id',6),
......3> both().has('id',5))).
......4> path().by('id')
==>[1,2,3,4,5,6]
==>[1,2,3,4,5,7,8,6]
请注意,当遍历从顶点1开始时,我与您在答案中描述的输出不完全匹配,因此在两种情况下所采用的路径都将包括该部分路径。