对于下面针对 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
- 未正确粘贴原始查询。
答案 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
。