Gremlin if else inside .by() 函数

Gremlin if else inside .by() function

我正在使用 Gremlin.Net 连接到 janus 数据库,我的问题是关于 gremlin 我怎样才能执行下一个查询,以防 id = 61464 的顶点没有父亲。目前爆发。 当我使用这个

g.V(61464).Project<object>("father", "mother", "children").
            By(Out("father")).
            By(Out("mother")).
            By(In("father").Fold()).Next();

如果所选顶点没有父节点,查询会中断,我该如何避免?

答案有点取决于您想要 return 代替 "father" 的内容。一种处理方法是使用 coalesce():

gremlin> g.V().project('name','age').
......1>         by('name').
......2>         by(coalesce(values('age'),constant('none')))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,age:none]
==>[name:josh,age:32]
==>[name:ripple,age:none]
==>[name:peter,age:35]

project() 步骤需要 by() 到 return 的东西。如果你想更好地塑造你的结果并删除不相关的 "age" 属性 你可以 post 过滤预计的 Map:

gremlin> g.V().
......1>   project('name','age').
......2>     by('name').
......3>     by(coalesce(values('age'),constant('none'))).
......4>   local(unfold().
......5>         filter(select(values).is(P.neq('none'))).
......6>         group().
......7>           by(keys).
......8>           by(select(values).unfold()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop]
==>[name:josh,age:32]
==>[name:ripple]
==>[name:peter,age:35]