为什么Gremlin Query选择/出错,而通过properties()查询返回正常?

时间:2018-03-13 18:59:23

标签: gremlin tinkerpop

对于下面针对 Tinkerpop的玩具图(graph = TinkerFactory.createModern())的查询,为什么第一个查询返回正常(预期无结果)但第二个查询返回查询错误了吗?

查询1:

g.V().hasLabel("person").has("name", "marko").properties("foo")

查询2:

    gremlin> g.V().hasLabel("person").has("name", "marko").as("p").select("p").by("foo")
    org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep 
cannot be cast to org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating

编辑:将by更新为as - 未正确粘贴原始查询。

1 个答案:

答案 0 :(得分:2)

首先,查询2中存在错误,应该是g.V().hasLabel("person").has("name", "marko").as("p").select("p").by("foo")

即使这样,查询也会返回错误,因为顶点'p'没有属性'foo'。抛出错误的原因是by步骤不是Gremlin中的实际步骤,它是另一步骤的调制器,在这种情况下是select("p")步骤。在查询2中,您试图通过不存在的属性来调制现代图形中的元素(v 1),从而导致错误。

相比之下,查询1尝试从地图中检索属性“foo”,这是properties步返回的内容。在groovy(Gremlin的基础语言)中,当您尝试从地图中提取不存在的属性时,将返回null

Gremlin By Step

Gremlin Properties Step