Gremlin. В родительско-дочерних отношениях отфильтруйте по более высокой версии дочернего - PullRequest
0 голосов
/ 09 октября 2019

У меня есть родительско-дочерняя структура. У ребенка есть версия и группа. Мне нужно создать фильтр для группировки новейших версий по group, parent.

. Этот запрос возвращает значения правильно, но мне нужна вершина для каждого случая:

g.V().hasLabel('Child')
.group()
.by(
  __.group()
  .by('tenant')
  .by(__.in('Has').values('name'))
)
.by(__.values('version').max())

Любые советы или предложения?

Спасибо за помощь!


Данные:

g.addV('Parent').property('name','child1').as('re1').addV('Parent').property('name','child2').as('re2').addV('Parent').property('name','child3').as('re3').addV('Child').property('tenant','group1').property('version','0.0.1').as('dp1').addE('Has').from('re1').to('dp1').addV('Child').property('tenant','group1').property('version','0.0.2').as('dp4').addE('Has').from('re1').to('dp4').addV('Child').property('tenant','group2').property('version','0.1.2').as('dp5').addE('Has').from('re1').to('dp5').addV('Child').property('tenant','group1').property('version','0.1.2').as('dp2').addE('Has').from('re2').to('dp2').addV('Child').property('tenant','group1').property('version','3.0.3').as('dp3').addE('Has').from('re3').to('dp3')

Вывод:

{{group1=child1}=0.0.2, {group2=child1}=0.1.2, {group1=child3}=3.0.3, {group1=child2}=0.1.2}

1 Ответ

2 голосов
/ 09 октября 2019

но мне нужна вершина для каждого случая

Я предполагаю, что вы имеете в виду вершину Child. Следующий обход предоставит вам все данные:

gremlin> g.V().hasLabel("Child").
           group().
             by(union(values("tenant"), __.in("Has").values("name")).fold()).
           unfold()
==>[group2, child1]=[v[14]]
==>[group1, child1]=[v[6], v[10]]
==>[group1, child2]=[v[18]]
==>[group1, child3]=[v[22]]

Однако вы, вероятно, хотите, чтобы он был в немного лучшей структуре:

gremlin> g.V().hasLabel("Child").
           group().
             by(union(values("tenant"), __.in("Has").values("name")).fold()).
           unfold().
           project('tenant','name','v').
             by(select(keys).limit(local, 1)).
             by(select(keys).tail(local, 1)).
             by(select(values).unfold())
==>[tenant:group2,name:child1,v:v[14]]
==>[tenant:group1,name:child1,v:v[6]]
==>[tenant:group1,name:child2,v:v[18]]
==>[tenant:group1,name:child3,v:v[22]]
...