按源节点gremlin过滤节点

时间:2018-02-15 18:45:50

标签: gremlin tinkerpop janusgraph

所以,假设我有这样的数据。

(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)

1 个答案:

答案 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开始时,我与您在答案中描述的输出不完全匹配,因此在两种情况下所采用的路径都将包括该部分路径。