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())
- 是满足此要求的最佳方法吗?
- 将 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()...
我正在创建 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())
- 是满足此要求的最佳方法吗?
- 将 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()...