Выберите Vertex на основе свойства ребра - PullRequest
1 голос
/ 06 апреля 2020

У меня сложный сценарий. Поэтому я попытался создать образец, как показано ниже.

g.AddV('class').property('id','1').property('name','class1').AddE('roster').to(g.AddV('student').property('id','11').property('name','student1'))
g.AddV('class').property('id','2').property('name','class2').AddE('roster').to(g.AddV('student').property('id','22').property('name','student2'))
g.AddV('class').property('id','3').property('name','class3').AddE('roster').to(g.AddV('student').property('id','33').property('name','student3'))
g.AddV('class4').property('id','4').property('name','class4').AddE('roster').to(g.V('11'))
g.V('11').AddE('logs').property('class_id','1').to(g.AddV('log').property('id','111').property('name','log1'))    

Вы, возможно, заметили, что student1 относится к 2 классам (class1 и class4). И student1 пишет лог log1 в class1. Но если я выполню этот запрос g.V('111').as('l').in().as('s').in().as('c').project('log','student','class').by(select('l').by('name')).by(select('s').by('name')).by(select('c').by('name'))

Он возвращает дубликаты данных, как показано ниже.

[
  {
    "log": "log1",
    "student": "student1",
    "class": "class1"
  },
  {
    "log": "log1",
    "student": "student1",
    "class": "class4"
  }
]

Ожидаемое поведение - возвращать только журнал из class1. Чтобы добиться этого, я добавил свойство class_id к краю logs, но не уверен, как применить условие для возврата дедуплицированного результата, т.е. возвращает журналы, принадлежащие к одному и тому же классу.

Любая помощь с запросом высоко ценится .

1 Ответ

4 голосов
/ 06 апреля 2020

Если вы хотите отфильтровать студента по свойству ребра, вы можете использовать where:

g.V().has('name', 'log1').as('l').
  inE().as('e').outV().as('s').
  in().where(eq('e')).by('class_id').as('c').
  project('log', 'student', 'class').
    by(select('l').by('name')).
    by(select('s').
      by('name')).
    by(select('c').by('name'))

Обратите внимание, что я разделил ваш первый шаг in, чтобы я мог использовать свойство ребра

пример: https://gremlify.com/3q

...