如何在 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
个顶点在你的图表中。
例如,使用 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
个顶点在你的图表中。