代码之家  ›  专栏  ›  技术社区  ›  FARSOS BULSARA

按源节点gremlin筛选节点

  •  0
  • FARSOS BULSARA  · 技术社区  · 6 年前

    假设我有这样的数据。

    (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 回复  |  直到 6 年前
        1
  •  2
  •   stephen mallette    6 年前

    我不确定我是否完全理解您的问题,但听起来您希望在看到遇到顶点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开始,因此我与您在回答中描述的输出不完全匹配,因此在这两种情况下,所采用的路径都将包括路径的该部分。