Gremlin通过多个属性分组

时间:2019-12-04 00:56:06

标签: elasticsearch graph-databases gremlin janusgraph

我能够在一个顶点的单个属性上按查询写入聚合/分组。 以下查询包含在检索数据时的ACL评估,您可以在回答问题时忽略这些数据。

 g.V().has('user','userId',123).emit().until(__.not(outE('member_of'))).repeat(out('member_of')).outE('has_permission').has('permission','view').inV().as('f').select('f').group().by('folderType').by(count())

这给了我以下结果

==>[PROJECT:2,RegularFolder:4,ORGANISATION:7,DIVISION:4]

就像folderType一样,文件夹顶点具有多个属性。

期望像Elasticsearch聚合查询结果一样。

"folderType":[PROJECT:2,RegularFolder:4,ORGANISATION:7,DIVISION:4]
"CreatedBy":[user1:2,user2:4,user3:7,user4:4]

如何编写给出上述结果且接近预期的gremlin查询。

1 个答案:

答案 0 :(得分:3)

我知道您说过要忽略您的初始查询,但我不禁要重写为:

g.V().has('user','userId',123).
  emit().
  until(__.not(outE('member_of'))).
  repeat(out('member_of')).
  outE('has_permission').has('permission','view').inV().
  groupCount().
    by('folderType')

,因为不需要“ f”的步骤标签,在这种情况下使用groupCount()更精确。如果您需要groupCount()的多个属性,我想可能有几种方法,但是在这种情况下,正如您所描述的,我认为最简单的方法是计算两个groupCount()副作用,然后{ 1}}一起出来:

cap()