【问题标题】:Gremlin if else inside .by() functionGremlin if else 在 .by() 函数中
【发布时间】:2018-01-16 18:32:41
【问题描述】:

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

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

【问题讨论】:

    标签: c# gremlin janusgraph


    【解决方案1】:

    答案在一定程度上取决于您想要返回什么来代替“父亲”。处理它的一种方法是使用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]
    

    【讨论】:

    • 嗨斯蒂芬,谢谢你的回答,它解决了我的问题,如果年龄不存在,我可以删除它吗?
    • 太好了,谢谢 :)
    • 通过展开地图中的内部列表进行了更多清理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多