【发布时间】:2018-10-26 20:22:45
【问题描述】:
Cosmos DB 不支持按任何非原语进行分组(我已经向他们发送了修复此问题的请求)。但与此同时,我如何在不需要数组的情况下通过多个值执行 groupCount() 或使用 lambdas(也不支持)
这就是我想做的事
g.V().groupCount().by(values('id', 'name').fold())
但我不能使用 values().fold()。有什么建议吗?
【问题讨论】:
Cosmos DB 不支持按任何非原语进行分组(我已经向他们发送了修复此问题的请求)。但与此同时,我如何在不需要数组的情况下通过多个值执行 groupCount() 或使用 lambdas(也不支持)
这就是我想做的事
g.V().groupCount().by(values('id', 'name').fold())
但我不能使用 values().fold()。有什么建议吗?
【问题讨论】:
嗯,我能想到的唯一(丑陋的)解决方法是:
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))
【讨论】:
match()