边的遍历

边遍历是指通过顶点来访问与其有关联边的邻接顶点(或者仅访问邻接边)。边遍历是图数据库与图计算的核心。

如图所示:

边遍历.jpg

顶点为基准的Step

以上图的顶点2:TinkerPop作为基准的step:

  1. g.V('2:TinkerPop')

out()

Step out(label):根据指定的EdgeLabel来访问顶点的OUT方向邻接点(可以是0个EdgeLabel,代表所有类型边;也可以一个或多个EdgeLabel,代表任意给定EdgeLabel的边)。

示例:

  1. // 获取 顶点"2:TinkerPop"的 OUT方向邻接点
  2. // 结果为:顶点"3:Gremlin"、顶点"2:TinkerGraph"
  3. g.V('2:TinkerPop').out()
  4. // 获取 顶点"2:TinkerPop"的 label="define"边的 OUT方向邻接点
  5. // 结果为:顶点"3:Gremlin"
  6. g.V('2:TinkerPop').out('define')
  7. // 获取 顶点"2:TinkerPop"的 label="define"边和label="contains"边的 OUT方向邻接点
  8. // 结果为:顶点"3:Gremlin"、顶点"2:TinkerGraph"
  9. g.V('2:TinkerPop').out('define', 'contains')

in()

Step in(label):根据指定的EdgeLabel来访问顶点的IN方向邻接点

示例:

  1. // 获取 顶点"2:TinkerPop"的 IN方向邻接点
  2. // 结果为:顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
  3. g.V('2:TinkerPop').in()
  4. // 获取顶点"2:TinkerPop"的 label="implements"边的 IN方向邻接点
  5. // 结果为:顶点"2:Titan"、顶点"2:HugeGraph"
  6. g.V('2:TinkerPop').in("implements")

both()

Step both(label):根据指定的EdgeLabel来访问顶点的双向邻接点

示例:

  1. // 获取顶点"2:TinkerPop"的双向邻接点
  2. // 结果为:顶点"2:TinkerGraph"、顶点"3:Gremlin"、顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
  3. g.V('2:TinkerPop').both()

outE()

Step outE(label):根据指定的EdgeLabel来访问顶点的OUT方向邻接边

示例:

  1. // 获取 顶点"2:TinkerPop"的 OUT方向邻接边
  2. // 结果为:边"S2:TinkerPop>3>>S2:TinkerGraph"、边"S2:TinkerPop>4>>S3:Gremlin"
  3. g.V('2:TinkerPop').outE()
  4. // 获取 顶点"2:TinkerPop"的 label="contains"的 OUT方向邻接边
  5. // 结果为:边"S2:TinkerPop>3>>S2:TinkerGraph"
  6. g.V('2:TinkerPop').outE("contains")

inE()

Step inE(label):根据指定的EdgeLabel来访问顶点的IN方向邻接边

示例:

  1. // 获取 顶点"2:TinkerPop"的 IN方向邻接边
  2. // 结果为:边"Sokram>2>>S2:TinkerPop"、边"Sspmallette>2>>S2:TinkerPop"、边"S2:Titan>5>>S2:TinkerPop"、边"S2:HugeGraph>5>>S2:TinkerPop"
  3. g.V('2:TinkerPop').inE()
  4. // 获取 顶点"2:TinkerPop"的 label="implements"的IN方向邻接边
  5. // 结果为:边"S2:Titan>5>>S2:TinkerPop"、边"S2:HugeGraph>5>>S2:TinkerPop"
  6. g.V('2:TinkerPop').inE('implements')

bothE()

Step bothE(label):根据指定的EdgeLabel来访问顶点的双向邻接边

示例:

  1. // 获取 顶点"2:TinkerPop"的 双向邻接边
  2. g.V('2:TinkerPop').bothE()

边为基准的Step

以上图的边”S2:Titan>5>>S2:TinkerPop”作为基准的Step:

  1. g.E("S2:Titan>5>>S2:TinkerPop")

outV()

Step outV():访问边的出顶点(出顶点是指边的起始顶点)

示例:

  1. // 获取边"S2:Titan>5>>S2:TinkerPop"的 出顶点
  2. // 结果为:顶点"2:Titan", 即 边"S2:Titan>5>>S2:TinkerPop"是从顶点"2:Titan"发出的
  3. g.E("S2:Titan>5>>S2:TinkerPop").outV()
  4. // 获取 顶点"2:TinkerPop"的 OUT方向邻接边的 出顶点
  5. // 等价于 g.V("2.TinkerPop").out()
  6. g.V("2:TinkerPop").outE().outV()

inV()

Step inV():访问边的入顶点(入顶点是指边的目标顶点,也就是箭头指向的顶点)

示例:

  1. // 获取 边"S2:Titan>5>>S2:TinkerPop"的 入顶点
  2. // 结果为:顶点"2:TinkerPop", 即 边"S2:Titan>5>>S2:TinkerPop"的箭头指向的是顶点"2:TinkerPop"
  3. g.E("S2:Titan>5>>S2:TinkerPop").inV()

bothV()

Step bothV():访问边的双向顶点

示例:

  1. // 获取 边"S2:Titan>5>>S2:TinkerPop"的 双向顶点
  2. // 结果为:顶点"2:Titan"、顶点"2:TinkerPop"
  3. g.E("S2:Titan>5>>S2:TinkerPop").bothV()

otherV()

Step otherV():访问边的伙伴顶点,即相对于基准顶点而言的边的另一端的顶点

示例:

  1. // 获取 顶点"2:TinkerPop" 的IN方向邻接边 的另一端的顶点
  2. // 结果为:顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
  3. g.V("2:TinkerPop").inE().otherV()

如果要使用otherV(),那么在获取边时,必须使用顶点获取边,即通过 g.V("2:TinkerPop").inE()g.V("2:TinkerPop").outE()

不能直接获取边的方式 g.E("S2:Titan>5>>S2:TinkerPop"),这种方式没有提前声明顶点,程序无法知道哪个是基准顶点,哪个是伙伴顶点,会报错。