边的遍历
边遍历是指通过顶点来访问与其有关联边的邻接顶点(或者仅访问邻接边)。边遍历是图数据库与图计算的核心。
如图所示:
顶点为基准的Step
以上图的顶点2:TinkerPop
作为基准的step:
g.V('2:TinkerPop')
out()
Step out(label)
:根据指定的EdgeLabel来访问顶点的OUT方向邻接点(可以是0个EdgeLabel,代表所有类型边;也可以一个或多个EdgeLabel,代表任意给定EdgeLabel的边)。
示例:
// 获取 顶点"2:TinkerPop"的 OUT方向邻接点
// 结果为:顶点"3:Gremlin"、顶点"2:TinkerGraph"
g.V('2:TinkerPop').out()
// 获取 顶点"2:TinkerPop"的 label="define"边的 OUT方向邻接点
// 结果为:顶点"3:Gremlin"
g.V('2:TinkerPop').out('define')
// 获取 顶点"2:TinkerPop"的 label="define"边和label="contains"边的 OUT方向邻接点
// 结果为:顶点"3:Gremlin"、顶点"2:TinkerGraph"
g.V('2:TinkerPop').out('define', 'contains')
in()
Step in(label)
:根据指定的EdgeLabel来访问顶点的IN方向邻接点
示例:
// 获取 顶点"2:TinkerPop"的 IN方向邻接点
// 结果为:顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
g.V('2:TinkerPop').in()
// 获取顶点"2:TinkerPop"的 label="implements"边的 IN方向邻接点
// 结果为:顶点"2:Titan"、顶点"2:HugeGraph"
g.V('2:TinkerPop').in("implements")
both()
Step both(label)
:根据指定的EdgeLabel来访问顶点的双向邻接点
示例:
// 获取顶点"2:TinkerPop"的双向邻接点
// 结果为:顶点"2:TinkerGraph"、顶点"3:Gremlin"、顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
g.V('2:TinkerPop').both()
outE()
Step outE(label)
:根据指定的EdgeLabel来访问顶点的OUT方向邻接边
示例:
// 获取 顶点"2:TinkerPop"的 OUT方向邻接边
// 结果为:边"S2:TinkerPop>3>>S2:TinkerGraph"、边"S2:TinkerPop>4>>S3:Gremlin"
g.V('2:TinkerPop').outE()
// 获取 顶点"2:TinkerPop"的 label="contains"的 OUT方向邻接边
// 结果为:边"S2:TinkerPop>3>>S2:TinkerGraph"
g.V('2:TinkerPop').outE("contains")
inE()
Step inE(label)
:根据指定的EdgeLabel来访问顶点的IN方向邻接边
示例:
// 获取 顶点"2:TinkerPop"的 IN方向邻接边
// 结果为:边"Sokram>2>>S2:TinkerPop"、边"Sspmallette>2>>S2:TinkerPop"、边"S2:Titan>5>>S2:TinkerPop"、边"S2:HugeGraph>5>>S2:TinkerPop"
g.V('2:TinkerPop').inE()
// 获取 顶点"2:TinkerPop"的 label="implements"的IN方向邻接边
// 结果为:边"S2:Titan>5>>S2:TinkerPop"、边"S2:HugeGraph>5>>S2:TinkerPop"
g.V('2:TinkerPop').inE('implements')
bothE()
Step bothE(label)
:根据指定的EdgeLabel来访问顶点的双向邻接边
示例:
// 获取 顶点"2:TinkerPop"的 双向邻接边
g.V('2:TinkerPop').bothE()
边为基准的Step
以上图的边”S2:Titan>5>>S2:TinkerPop”作为基准的Step:
g.E("S2:Titan>5>>S2:TinkerPop")
outV()
Step outV()
:访问边的出顶点(出顶点是指边的起始顶点)
示例:
// 获取边"S2:Titan>5>>S2:TinkerPop"的 出顶点
// 结果为:顶点"2:Titan", 即 边"S2:Titan>5>>S2:TinkerPop"是从顶点"2:Titan"发出的
g.E("S2:Titan>5>>S2:TinkerPop").outV()
// 获取 顶点"2:TinkerPop"的 OUT方向邻接边的 出顶点
// 等价于 g.V("2.TinkerPop").out()
g.V("2:TinkerPop").outE().outV()
inV()
Step inV()
:访问边的入顶点(入顶点是指边的目标顶点,也就是箭头指向的顶点)
示例:
// 获取 边"S2:Titan>5>>S2:TinkerPop"的 入顶点
// 结果为:顶点"2:TinkerPop", 即 边"S2:Titan>5>>S2:TinkerPop"的箭头指向的是顶点"2:TinkerPop"
g.E("S2:Titan>5>>S2:TinkerPop").inV()
bothV()
Step bothV()
:访问边的双向顶点
示例:
// 获取 边"S2:Titan>5>>S2:TinkerPop"的 双向顶点
// 结果为:顶点"2:Titan"、顶点"2:TinkerPop"
g.E("S2:Titan>5>>S2:TinkerPop").bothV()
otherV()
Step otherV()
:访问边的伙伴顶点,即相对于基准顶点而言的边的另一端的顶点
示例:
// 获取 顶点"2:TinkerPop" 的IN方向邻接边 的另一端的顶点
// 结果为:顶点"okram"、顶点"spmallette"、顶点"2:Titan"、顶点"2:HugeGraph"
g.V("2:TinkerPop").inE().otherV()
如果要使用
otherV()
,那么在获取边时,必须使用顶点获取边,即通过g.V("2:TinkerPop").inE()
或g.V("2:TinkerPop").outE()
。不能直接获取边的方式
g.E("S2:Titan>5>>S2:TinkerPop")
,这种方式没有提前声明顶点,程序无法知道哪个是基准顶点,哪个是伙伴顶点,会报错。