【问题标题】:Gremlin groupCount() by multiple values without using fold()Gremlin groupCount() 通过多个值而不使用 fold()
【发布时间】:2018-10-26 20:22:45
【问题描述】:

Cosmos DB 不支持按任何非原语进行分组(我已经向他们发送了修复此问题的请求)。但与此同时,我如何在不需要数组的情况下通过多个值执行 groupCount() 或使用 lambdas(也不支持)

这就是我想做的事

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

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

【问题讨论】:

    标签: azure-cosmosdb gremlin


    【解决方案1】:

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

    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))
    

    【讨论】:

    • cosmosdb 不支持match()
    • 谢谢,这两个例子都很棒。一旦我看到我可以玩弄嵌套组并折叠 + 展开,我就开始工作了。
    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多