Gremlin - 如果多个顶点 return 每个都有多个值,如何将结果限制为每个顶点一个

Gremlin - if multiple vertices return multiple values each, how to limit the result to one per vertex

本质上,我正在尝试修改以下 Gremlin 代码,而不是一次对单个顶点进行操作 - 用 g.V(1) 表示,它会同时处理多个顶点(例如更改为 g.V()),同时仍仅将每个顶点 返回结果的数量限制为 一个(参见 limit(1)) .

g.V(1).repeat(out().simplePath()).until(has('color', 'red')).path().limit(1)

上述查询将计算从给定顶点到具有 property(color)==red 的最近顶点的最短路径。

但是,我想计算同时传入的多个顶点的最短路径,同时仍然只为每个顶点返回一条路径。

但是,如果不为同一顶点返回多条路径,我很难修改它。

通过起始顶点对结果进行去重应该会得到预期的结果。

g.V().as('a').
  repeat(out().simplePath()).
    until(has('color', 'red')).
  dedup('a').
  path()

使用现代玩具图的示例:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().
......1>   repeat(out().simplePath()).
......2>     until(hasLabel('software')).
......3>   path()
==>[v[1],v[3]]
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]
==>[v[4],v[5]]
==>[v[4],v[3]]
==>[v[6],v[3]]
gremlin> g.V().as('a').
......1>   repeat(out().simplePath()).
......2>     until(hasLabel('software')).
......3>   dedup('a').path()
==>[v[1],v[3]]
==>[v[4],v[5]]
==>[v[6],v[3]]