【发布时间】:2021-10-16 19:10:15
【问题描述】:
我正在使用 java 驱动程序。我尝试检查某个顶点/边是否存在属性。
int id = 1;
String propStartName = "startDate";
g.V(id).properties(propStartName).tryNext().isPresent();
这看起来可行,但似乎太长且效率低下。有没有更好的办法?
【问题讨论】:
标签: gremlin tinkerpop janusgraph
我正在使用 java 驱动程序。我尝试检查某个顶点/边是否存在属性。
int id = 1;
String propStartName = "startDate";
g.V(id).properties(propStartName).tryNext().isPresent();
这看起来可行,但似乎太长且效率低下。有没有更好的办法?
【问题讨论】:
标签: gremlin tinkerpop janusgraph
您可以编写以下查询:
g.V(id).project('propStartName').by(coalesce(values('propStartName'),constant('')))
如果 propStartName 没有任何值(空字符串),则表示该特定顶点的属性不存在。
【讨论】:
你可以使用:
g.V(id).has("propStartName").hasNext();
gremlin 控制台中的以下会话显示了您可以如何进行试验。
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().elementMap()
==>[id:1,label:person,name:marko,age:29]
==>[id:2,label:person,name:vadas,age:27]
==>[id:3,label:software,name:lop,lang:java]
==>[id:4,label:person,name:josh,age:32]
==>[id:5,label:software,name:ripple,lang:java]
==>[id:6,label:person,name:peter,age:35]
gremlin> g.V(1).has("lang")
gremlin> g.V(1).has("lang").hasNext()
==>false
gremlin> g.V(1).has("name").hasNext()
==>true
【讨论】: