本质上,我试图修改以下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();
的最近顶点的最短路径。
但是,我想为同时传递的多个顶点计算最短路径,而每个顶点仍只返回一条路径。
但是,在不为同一顶点返回多个路径的情况下,我很难修改它。
答案 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]]