【问题标题】:In Gremlin, how can one query vertices where one property value is greater than another property value?在 Gremlin 中,如何查询一个属性值大于另一个属性值的顶点?
【发布时间】:2019-03-08 15:21:09
【问题描述】:

我确信这很简单,但我不知道该怎么做。我有带有特定标签的顶点,它们有两个整数属性。我们称它们为 integer1 和 integer2。我只是想查询 integer2 大于 integer1 的所有顶点。

我尝试了以下方法:

g.V().hasLabel("myLabel").has("integer2", P.gt(values("integer1"))).toList(); 

但这会导致异常 - 可以理解,因为“值”方法调用会导致遍历步骤,其中谓词需要一个数字。

Exception in thread "main" java.lang.ClassCastException: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal cannot be cast to java.lang.Integer
    at java.lang.Integer.compareTo(Integer.java:52)
    at org.apache.tinkerpop.gremlin.process.traversal.Compare$3.test(Compare.java:92)
    at org.apache.tinkerpop.gremlin.process.traversal.P.test(P.java:72)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.testValue(HasContainer.java:118)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.test(HasContainer.java:94)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.testAll(HasContainer.java:180)
    at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.iteratorList(TinkerGraphStep.java:116)
    at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.vertices(TinkerGraphStep.java:88)
    at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep.lambda$new$0(TinkerGraphStep.java:59)
    at org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.step.sideEffect.TinkerGraphStep$$Lambda$23/1123629720.get(Unknown Source)
...

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: gremlin tinkerpop3


    【解决方案1】:

    一种方法是使用where() 子句。首先,为了演示,我修改了“现代”图以包含具有整数值的“k”属性:

    g = TinkerFactory.createModern().traversal()
    g.V().hasLabel('person').property('k',30) 
    

    然后:

    gremlin> g.V().hasLabel('person').as('a').
    ......1>   where('a', gt('a')).by('age').by('k').
    ......2>   valueMap('age','k')
    ==>[k:[30],age:[32]]
    ==>[k:[30],age:[35]]
    

    【讨论】:

    • 像往常一样,斯蒂芬,我对您的知识和响应能力印象深刻。这行得通。我需要更好地理解底层的遍历机制,才能更直观地理解语法。除了标准的 Tinkerpop 文档,你还有什么推荐的吗?
    • 好吧,我总是推荐:kelvinlawrence.net/book/Gremlin-Graph-Guide.html,人们经常会错过食谱:tinkerpop.apache.org/docs/current/recipes,但也要注意,一本关于图表/Gremlin 的新书现在与 manning 一起提前发布:@ 987654323@
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多