Tinkerpop Gremlin 按键分组并获取最新信息

Tinkerpop Gremlin group by key and get latest

我正在创建 2 个用户 (uid=1 & uid=2),每个用户有 2 个版本。

g.addV('user1').property('uid',1).property('version',1)
 .addV('user1').property('uid',1).property('version',2)
 .addV('user1').property('uid',2).property('version',1)
 .addV('user1').property('uid',2).property('version',2)

我想从每个 uid 获取最新版本,我使用 uid 作为 groupBy 密钥并获取最新版本

g.V().hasLabel('user1')
.group().by('uid').by(fold().order(Scope.local).by('version', Order.desc).unfold().limit(1)) //GraphTraversal<Vertex,Map<Object, Object>>
.flatmap(t -> t.get().values().iterator()) // convert to GraphTraversal<Vertex, Vertex>
//traverse out and get the path
.out('friend').path().by(elementMap())
  1. 是满足此要求的最佳方法吗?
  2. 将 Map 转换为平面图中的顶点而不是使用 lambda 的 gremlin 首选方法是什么?假设我想在此之后添加更多步骤。

感谢任何帮助!

group步骤有两种模式。如果没有标签,它会起到屏障的作用,但如果有标签,它就会起到副作用的作用。您可以使用您的数据使结果在一个组中流动,如下所示。

gremlin> g.V().group('x').by('uid').by(values('version').max())
==>v[42306]
==>v[42309]
==>v[42312]
==>v[42315]
==>v[42318]  

gremlin> g.V().group('x').by('uid').by(values('version').max()).cap('x')
==>[1:2,2:2]  

您当然可以在决定要对组执行什么操作之前添加更多遍历步骤。如:

g.V().group('x').by('uid').by(values('version').max())out()...