代码之家  ›  专栏  ›  技术社区  ›  janus graph

如果里面有其他东西,那就是小精灵。by()函数

  •  1
  • janus graph  · 技术社区  · 7 年前

    我正在使用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 回复  |  直到 7 年前
        1
  •  4
  •   stephen mallette    7 年前

    答案在一定程度上取决于你想要什么来代替“父亲”。解决这个问题的一种方法是 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]