如何在 Gremlin 中进行以下子查询?

How do I make the following subquery in Gremlin?

例如,使用 Tinkerpop 的玩具图数据 (graph = TinkerFactory.createModern()),我想执行如下操作:

g.V().hasLabel('person').has('name', 'marko').project('a', 'b').by().by(...)

我想使用第一次遍历中的 属性 个顶点,并在第二次 by() 的查询中使用它。

类似这样的伪代码:

by(__.V().has(hasLabel('person').has('name', [property-from-first-traversal])))

这在单独的查询中可能更容易完成,但我想在一个查询中完成 - 类似于 SQL 中的子查询。

您可能正在寻找这样的东西:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.addV('person').property('name','marko')
==>v[13]
gremlin> g.V().has('person','name', 'marko').
           project('a', 'b').
             by().
             by(__.as('x').V().hasLabel('person').where(eq('x')).by('name').count())
==>[a:v[1],b:2]
==>[a:v[13],b:2]

但是,请注意 where() 过滤器,到目前为止,没有提供程序(据我所知)会将其转换为索引查找,因此它将扫描所有 person 个顶点在你的图表中。