【发布时间】:2020-06-23 17:48:54
【问题描述】:
我正在创建 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())
- 是满足此要求的最佳方法吗?
- 将地图转换为平面地图内的顶点而不是使用 lambda 的 gremlin 首选方法是什么?假设我想在此之后添加更多步骤。
感谢任何帮助!
【问题讨论】:
-
你能分享你想要得到的结果吗?你在寻找这样的东西吗? gremlin> g.V().group().by('uid').by(values('version').max()) ==>[1:2,2:2]
-
@KelvinLawrence 我想继续遍历 [g.V().group().by('uid').by(values('version').max())..out ('朋友').path().by(elementMap())]
-
在这种情况下,您可以通过给该组一个标签 g.V().group('x').by('uid').by(values('version') 来使该组成为副作用.max()).out()....然后当你完成后,只需组装最终结果。
-
是的,这就是我想要的。我假设第二组副作用也可以添加到输出中,对吗?例如 [g.V().group('x').by('uid').by(values('version').max()).out().group('x').by('uid' )。旁路()...]。谢谢!
-
如果其他人有同样的问题,我会快速输入答案