Gremlin groupCount()通过多个值而不使用fold()

时间:2018-10-26 20:22:45

标签: azure-cosmosdb gremlin

Cosmos DB不支持按任何不是原始类型的分组(我已经发送了要求他们修复此问题的请求)。但是与此同时,如何通过多个值对groupCount()进行运算而不需要数组或使用lambda(也不支持)

这就是我想做的

g.V().groupCount().by(values('id', 'name').fold())

但是我不能使用values()。fold()。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

嗯,我能想到的唯一(丑陋)的解决方法是:

g.V().
  group().
    by('id').
    by(groupCount().by('name')).
  unfold().
  match(__.as('kv').select(keys).as('k'),
        __.as('kv').select(values).unfold().as('v')).
  project('key','value').
    by(union(select('k'), select('v').by(keys)).fold()).
    by(select('v').by(values))

因此,基本上是按原始值进行嵌套分组,然后展开并重新分组为仅由原始键组成的映射。结果将类似于以下内容:

==>[key:[id1,name1],value:1]
==>[key:[id2,name2],value:2]
==>[key:[id3,name3],value:1]
...

更新

由于CosmosDB不支持match(),因此查询如下:

g.V().
  group().
    by('id').
    by(groupCount().by('name')).
  unfold().as('kv').
  select(keys).as('k').
  select('kv').select(values).unfold().as('v').
  project('key','value').
    by(union(select('k'), select('v').by(keys)).fold()).
    by(select('v').by(values))