为什么 Gremlin Query select/by 出错而通过 properties() returns 查询正常?
Why does Gremlin Query select/by errors out whereas querying by properties() returns fine?
对于以下针对 Tinkerpop 的玩具图 (图 = TinkerFactory.createModern())的查询,为什么第一个查询 returns 没问题(使用预期没有结果)但第二个查询出错了?
查询 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
- 没有正确粘贴我的原始查询。
首先,查询2有错误应该是g.V().hasLabel("person").has("name", "marko").as("p").select("p").by("foo")
即使如此,查询也会 return 出错,因为顶点 'p' 没有 属性 'foo'。这引发错误的原因是 by
步骤不是 Gremlin 中的实际步骤,它是另一个步骤的调制器,在本例中为 select("p")
步骤。在查询 2 中,您试图通过 non-existant 属性 调制元素(现代图表中的 v1),这会导致错误。
相比之下,查询 1 试图从地图中检索 属性 'foo',这就是 properties
步骤 return 的内容。在 groovy(Gremlin 的底层语言)中,当您尝试从地图中提取 non-existent 属性 时,null
被 returned。
对于以下针对 Tinkerpop 的玩具图 (图 = TinkerFactory.createModern())的查询,为什么第一个查询 returns 没问题(使用预期没有结果)但第二个查询出错了?
查询 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
- 没有正确粘贴我的原始查询。
首先,查询2有错误应该是g.V().hasLabel("person").has("name", "marko").as("p").select("p").by("foo")
即使如此,查询也会 return 出错,因为顶点 'p' 没有 属性 'foo'。这引发错误的原因是 by
步骤不是 Gremlin 中的实际步骤,它是另一个步骤的调制器,在本例中为 select("p")
步骤。在查询 2 中,您试图通过 non-existant 属性 调制元素(现代图表中的 v1),这会导致错误。
相比之下,查询 1 试图从地图中检索 属性 'foo',这就是 properties
步骤 return 的内容。在 groovy(Gremlin 的底层语言)中,当您尝试从地图中提取 non-existent 属性 时,null
被 returned。