Gremlin 按多个属性分组
Gremlin group by on multiple properties
我可以通过查询单个顶点 属性 来编写 aggregation/group。
以下查询在检索数据时包含 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 查询。
我知道你说过要忽略你的初始查询,但我忍不住重写为:
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()
副作用,然后 cap()
他们两个一起出来:
g.V().has('user','userId',123).
emit().
until(__.not(outE('member_of'))).
repeat(out('member_of')).
outE('has_permission').has('permission','view').inV().
groupCount('folderType').
by('folderType').
groupCount('CreatedBy').
by('CreatedBy').
cap('folderType','CreatedBy')
我可以通过查询单个顶点 属性 来编写 aggregation/group。 以下查询在检索数据时包含 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 查询。
我知道你说过要忽略你的初始查询,但我忍不住重写为:
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()
副作用,然后 cap()
他们两个一起出来:
g.V().has('user','userId',123).
emit().
until(__.not(outE('member_of'))).
repeat(out('member_of')).
outE('has_permission').has('permission','view').inV().
groupCount('folderType').
by('folderType').
groupCount('CreatedBy').
by('CreatedBy').
cap('folderType','CreatedBy')