为什么 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。

Gremlin By Step

Gremlin Properties Step