我的情况很复杂。所以我尝试创建一个示例,如下所示。
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类(1类和4类)。 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
,但不确定如何应用条件以返回重复数据删除的结果,即返回属于同一类的日志。
非常感谢您对查询的任何帮助。
答案 0 :(得分:1)
如果要按edge属性过滤学生,可以使用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属性