【发布时间】:2020-06-03 19:21:46
【问题描述】:
参考之前提出的这个问题: Default value when property is missing with project() step in Gremlin? 有没有更有效的方法来做同样的事情,或者最好在最新的 gremlin 版本中返回“null”,因为每个合并步骤需要额外的 2 次遍历?
【问题讨论】:
标签: gremlin
参考之前提出的这个问题: Default value when property is missing with project() step in Gremlin? 有没有更有效的方法来做同样的事情,或者最好在最新的 gremlin 版本中返回“null”,因为每个合并步骤需要额外的 2 次遍历?
【问题讨论】:
标签: gremlin
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,因为它基于关系后端?)支持默认值,因为大多数都没有架构的概念。
【讨论】: