1

我有一个复杂的场景。所以我试图创建一个如下示例。

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写入登录log1class1但是如果我运行这个查询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_idlogs但不确定如何应用条件来返回去重结果,即返回属于同一类的日志。

非常感谢您对查询的任何帮助。

4

1 回答 1

1

如果您想通过边缘属性过滤学生,您可以使用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第一步,以便可以使用 edge 属性

示例: https ://gremlify.com/3q

于 2020-04-06T20:37:11.700 回答