繁体   English   中英

检查 gremlin 查询中的 sack() 值

[英]Check the sack() value in a gremlin query

我们有一个查询来查找节点的可能路径。 我们用数字表示 ABC 路径,如表中所示,我们使用按位和运算来查看节点的可用路径。 如果至少有一个到节点的可用路径(A、B 或 C)(values('availablePath').is(gt(0))),我们将重复查询。 但是,如果 sack 值为 0,我们希望停止查询,因为 sack 值为 0,因此在节点 3 之后继续遍历没有意义,这意味着您无法通过 A、B 或 C 路径访问节点 3。 有没有办法获取 sack 值并在它为 0 时停止遍历?
我们的查询是:

g.withSack(7).
 V().has('id','1')
 local(
   repeat(bothE().where(values('availablePath').is(gt(0))).
          sack{f,l -> f & l}.
            by('availablePath').
          otherV().
          simplePath().as('node')).
   emit().
   sack().as('path')).
 select('node','path').
   by().
   by().
 dedup()

示例图创建查询:

g.addV('node').property('id','1').as('1')
.addV('node').property('id','2').as('2')
.addV('node').property('id','3').as('3')
.addV('node').property('id','4').as('4')
.addE('edge').property('availablePath',3).from('1').to('2').as('edge1')
.addE('edge').property('availablePath',4).from('2').to('3').as('edge2')
.addE('edge').property('availablePath',7).from('3').to('4').as('edge3')

遍历从节点 1 开始。

图形

桌子

您可以在where步骤中测试sack值,如下所示:

gremlin> g.withSack(7).
......1>  V().has('id','1').
......2>  local(
......3>    repeat(bothE().where(values('availablePath').is(gt(0)).and().sack().is(gt(0))).
......4>           sack{f,l -> f & l}.
......5>             by('availablePath').
......6>           otherV().
......7>           simplePath().as('node')).
......8>    emit().
......9>    sack().as('path')).
.....10>  select('node','path').
.....11>    by().
.....12>    by().
.....13>  dedup()

==>[node:v[4],path:3]
==>[node:v[6],path:0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM