如何为图表中缺少并在 project() 步骤中查询的 属性 设置默认值或 return 空值
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
关于这个先前提出的问题:
有没有更有效的方法来做同样的事情,或者最好在最新的 gremlin 版本中返回 "null",因为每个合并步骤需要 2 次额外的遍历?
Gremlin 不会有 null
遍历器 发布的概念(目前没有发布时间表)。以下是 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 因为它基于关系后端?)支持默认值,因为大多数都没有模式的概念。
关于这个先前提出的问题:
Gremlin 不会有 null
遍历器
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 因为它基于关系后端?)支持默认值,因为大多数都没有模式的概念。