Gremlin if else in .by()函数

时间:2018-01-16 18:32:41

标签: c# gremlin janusgraph

我正在使用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();

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

1 个答案:

答案 0 :(得分:4)

答案取决于你想要回归什么而不是“父亲”。处理它的一种方法是使用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()返回一些内容。如果您想更好地调整结果并放弃不相关的“年龄”属性,您可以过滤预计的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]