【问题标题】:How to set default values or return null value for a property which is missing in the graph and is been queried in the project() step如何为图表中缺失且在 project() 步骤中查询的属性设置默认值或返回 null 值
【发布时间】:2020-06-03 19:21:46
【问题描述】:

参考之前提出的这个问题: Default value when property is missing with project() step in Gremlin? 有没有更有效的方法来做同样的事情,或者最好在最新的 gremlin 版本中返回“null”,因为每个合并步骤需要额外的 2 次遍历?

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    Gremlin 不会发布 null 遍历器 until 3.5.0 的概念(目前没有发布时间表)。以下是 3.5.0 的一些示例:

    gremlin> g = TinkerGraph.open().traversal()
    ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
    gremlin> g.addV('person').property('name','allen')
    ==>v[0]
    gremlin> g.V().has('person','name','allen').project('name','age').by('name').by('age')
    ==>[name:allen,age:null]
    gremlin> g.V().has('person','name','allen').elementMap()
    ==>[id:0,label:person,name:allen]
    gremlin> g.V().has('person','name','allen').elementMap('name','age')
    ==>[id:0,label:person,name:allen]
    gremlin> g.V().has('person','name','allen').values('name','age')
    ==>allen
    gremlin> g.V().has('person','name','allen').union(values('name'),values('age'))
    ==>allen
    gremlin> g.V().has('person','name','allen').union(values('name'),coalesce(values('age'),constant(null)))
    ==>allen
    ==>null
    

    使用coalesce() 的效率应该不会有太大损失,即使您必须使用其中的许多。 constant() 的成本不是问题,values(String) 假设这就是你所做的一切将编译成快速的TokenTraversal。我想最大的损失是不得不打字很多。我不知道有任何图形数据库(可能是sqlg,因为它基于关系后端?)支持默认值,因为大多数都没有架构的概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2010-10-16
      • 2017-10-06
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多