【问题标题】:How to check if the certain vertex or edge has a property efficiently?如何有效地检查某个顶点或边是否具有属性?
【发布时间】:2021-10-16 19:10:15
【问题描述】:

我正在使用 java 驱动程序。我尝试检查某个顶点/边是否存在属性。

int id = 1;
String propStartName = "startDate";
g.V(id).properties(propStartName).tryNext().isPresent();

这看起来可行,但似乎太长且效率低下。有没有更好的办法?

【问题讨论】:

    标签: gremlin tinkerpop janusgraph


    【解决方案1】:

    您可以编写以下查询:

    g.V(id).project('propStartName').by(coalesce(values('propStartName'),constant('')))

    如果 propStartName 没有任何值(空字符串),则表示该特定顶点的属性不存在。

    【讨论】:

      【解决方案2】:

      你可以使用:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多