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]]
本质上,我正在尝试修改以下 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]]