В Gremlin, как можно запрашивать вершины, где одно значение свойства больше, чем другое значение свойства? - PullRequest
0 голосов
/ 08 марта 2019

Я уверен, что это просто, но я не уверен, как это сделать.У меня есть вершины с определенной меткой, которые имеют два целочисленных свойства.Давайте назовем их integer1 и integer2.Я просто хочу запросить все вершины, где integer2 больше, чем integer1.

Я пробовал следующее:

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

, но это приводит к исключению - понятно, так как вызов метода "values" приводит к шагу обхода, когда предикат ожидает число,

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)
...

Любая помощь будет принята с благодарностью.Благодарю.

1 Ответ

1 голос
/ 08 марта 2019

Один из способов сделать это - предложение 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]]
...