группировать дочерние вершины по свойству

Я использую Amazon Neptune со следующей простой схемой графа:

root --has--> child

где корневая вершина может иметь много разных свойств.

Мне нужен запрос, который создает словарь, включающий все свойства корневой вершины в качестве ключей и массив всех дочерних вершин с одинаковым значением.

например со следующими данными:

{
  root: {
   a: 1
   b: 2
   c: 3
  },
  child1: {
   a: 4
   b: 2
   c: 3
  },
  child2: {
   a: 1
   b: 4
   c: 3
  }
}

Получу такой результат:

{
  a: [child2],
  b: [child1],
  c: [child1, child2]
}

Когда я знаю свойства, я могу сделать что-то вроде этого:

g.V().hasLabel('Root').as('root')
  .project('a', 'b', 'c')
  .by(out('has').where(eq('root')).by('a').fold())
  .by(out('has').where(eq('root')).by('b').fold())
  .by(out('has').where(eq('root')).by('c').fold())

есть ли способ создать это, не зная свойств корня?


person Louis89Jones    schedule 17.05.2020    source источник


Ответы (1)


Может быть, есть более элегантное решение, но все равно это моя попытка:

g.V().hasLabel('Root').as('root').
  properties().as('prop').
  group().by(label).
    by(select('root').
      out('has').where(properties().and(
          where(eq('prop')).by(key),
          where(eq('prop')).by(value)
        )).
      fold())

пример: https://gremlify.com/9y

person noam621    schedule 17.05.2020