Gremlin-如果多个顶点各自返回多个值,如何将结果限制为每个顶点一个

时间:2019-07-18 15:14:35

标签: gremlin janusgraph gremlin-server

本质上,我试图修改以下Gremlin代码,以使它一次不能处理多个顶点(例如,更改为g.V(1)),而不是一次对单个顶点进行操作(由g.V()表示)。 limit(1)),同时仍仅将每个顶点返回的结果数 限制为一个(请参阅g.V(1).repeat(out().simplePath()).until(has('color', 'red')).path().limit(1) )。

property(color)==red

上面的查询将计算从给定顶点到具有var querySyntax = (from product in SampleProductTable join sale in SampleSalesTable on product.Id equals sale.ProductId into sales from subSales in sales.DefaultIfEmpty() group subSales by new { product.Id, product.TotalSales } into grp select new { grp.Key.Id, TotalSales = grp.Sum(s => s.Amount) + grp.Key.TotalSales }).ToList(); 的最近顶点的最短路径。

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

但是,在不为同一顶点返回多个路径的情况下,我很难修改它。

1 个答案:

答案 0 :(得分:1)

通过起始顶点对结果进行重复数据删除,可以得到预期的结果。

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]]
相关问题