Gremlin groupCount () по нескольким значениям без использования fold () - PullRequest
0 голосов
/ 26 октября 2018

Cosmos DB не поддерживает группировку по чему-либо, что не является примитивным (я уже отправил запрос на их исправление). Но в то же время, как я могу пойти, выполнив groupCount () для нескольких значений без использования массивов, или используя лямбда-выражения (которые также не поддерживаются)

Это то, что я хотел бы сделать

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

Но я не могу использовать значения (). Fold (). Есть предложения?

1 Ответ

0 голосов
/ 27 октября 2018

Хм, единственный (безобразный) обходной путь, о котором я могу подумать, это:

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]
...

UPDATE

Поскольку 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))
...